> The fix is to move all of the startup code into the .text section and > then everything works. > > OK to apply ? No. .init/.fini are executable (they are code fragments) and should be in .text; but .init_array/.preinit_array/.fini_array are data (arrays of addresses), should be in .data/.rodata, and should not be marked executable.