Some Linux kernel verification mechanisms have caught compiler bugs in the past. That's why I considered the possibility to do this as well.
The only ones that I am aware of are *generic* sanity checks in the kernel, that manage to trip on something that turned out to be a compiler bug. Adding specific sanity checks for every piece of code that only checks for compiler bugs is foolishness (hint: it's impossible to ever get even 1% cover; and that check code itself is run through that same compiler anyway!)
If there is a *specific* compiler bug that you are aware of, it is nicer to catch it at build time, if possible, or just refuse to build with the broken compiler.
At some point the entry point to a blob was at the beginning of the file. Adding the flexibility to begin with moved complexity from compile time to run time -- guess what, that was a bad idea.
Unless you fork gcc, having the entry point at the beginning of initram is not possible. It worked by accident in the past and I'm pretty sure Segher will confirm that we can't rely on that.
No, I confirm you *can* rely on that: just set up your linker script and your crt.o so this works. Something like
.start : { crt0.o(*) } .text : { *(.text) } .data : { *(.data) }
will guarantee that all of crt0 ends up before anything else (and there is no need to make it a separate section, FWIW).
Segher