I am going to continue on this but it will be slow, I have a lot going on.
The basic problem as I see it is that there is a little more magic in the build process than it can stand, and specific platforms are breaking.
In c_start.S and the constructed crt0.S there is a symbol called _start. Same name. There are also, in these files, a set of symbols that on some builds are needed for that build. So we need the .o from both files in some builds. But the conflicting _start symbols are causing trouble.
Simple attempts to change the name of the start symbol (e.g. change _start in crt0.S to _machine_reset_start) lead to a host of other undefined symbols, since once the _start is undefined, that file is not pulled in and the symbols in that file are not resolved.
I would rather not get into 'weak' symbols in assembly code files.
Anyway, if anyone gets a chance to look at this and has some ideas ... let me know. But we need to fix this situation.
ron