Without this, rodata and initfini would overlap. I'll be the first
to admit I don't 100% understand why it happened, but it did, and
this change seems to address the problem. If it ever happens again,
we'll have to get to the bottom of things.
Also, collate all of .rodata* into a single section
AT (LOADADDR(.text) + (ADDR(.rodata) - ADDR(.text)))
{
*(.rodata)
+ *(.rodata.*)
+ }
+
+ .initfini :
+ AT (LOADADDR(.text) + (ADDR(.initfini) - ADDR(.text)))
+ {
__init_array_start = . ;
*(SORT_BY_INIT_PRIORITY(.init_array.*))
*(SORT_BY_INIT_PRIORITY(.ctors*))