diff --git a/cpu/lpc2387/linkerscript.x b/cpu/lpc2387/linkerscript.x index 79ca56a93bc42cef93c84801674135f1b1367c73..2128546557d26b8ae7876c0aab4493e88a77b67b 100644 --- a/cpu/lpc2387/linkerscript.x +++ b/cpu/lpc2387/linkerscript.x @@ -107,6 +107,15 @@ SECTIONS } >flash /* put all the above into FLASH */ . = ALIGN(4); + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } >flash + __exidx_end = .; + _etext = . ; /* define a global symbol _etext just after the last code byte */ .config : @@ -175,7 +184,26 @@ SECTIONS _data = .; /* create a global symbol marking the start of the .data section */ *(.data) /* all .data sections */ *(.gnu.linkonce.d*) - } >ram /* put all the above into RAM (but load the LMA copy into FLASH) */ + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >ram /* put all the above into RAM (but load the LMA copy into FLASH) */ . = ALIGN(4); /* ensure data is aligned so relocation can use 4-byte operations */ _edata = .; /* define a global symbol marking the end of the .data section */