+INCLUDE ../common/ldscript.common\r
+\r
+ENTRY(flashstart)\r
SECTIONS\r
{\r
- . = 0x00000000;\r
- .text : { obj/flash-reset.o(.text) *(.text) }\r
- .rodata : { *(.rodata) }\r
- . = 0x00200000;\r
- .data : { *(.data) }\r
- __bss_start__ = .;\r
- .bss : { *(.bss) }\r
+ . = 0;\r
+ \r
+ .bootphase1 : {\r
+ *(.startup) \r
+ *(.bootphase1)\r
+ \r
+ /* It seems to be impossible to flush align a section at the\r
+ end of a memory segment. Instead, we'll put the version_information\r
+ wherever the linker wants it, and then put a pointer to the start\r
+ of the version information at the end of the section.\r
+ -- Henryk Plötz <henryk@ploetzli.ch> 2009-08-28 */\r
+ \r
+ _version_information_start = ABSOLUTE(.);\r
+ *(.version_information);\r
+ \r
+ /* Why doesn't this work even though _bootphase1_version_pointer = 0x1001fc?
+ . = _bootphase1_version_pointer - ORIGIN(bootphase1); */\r
+ /* This works, apparently it fools the linker into accepting an absolute address */\r
+ . = _bootphase1_version_pointer - ORIGIN(bootphase1) + ORIGIN(bootphase1);\r
+ LONG(_version_information_start)\r
+ } >bootphase1\r
+ \r
+ __bootphase2_src_start__ = ORIGIN(bootphase2);\r
+ .bootphase2 : {\r
+ __bootphase2_start__ = .;\r
+ *(.startphase2)\r
+ *(.text)\r
+ *(.glue_7)\r
+ *(.glue_7t)\r
+ *(.rodata)\r
+ *(.data)\r
+ . = ALIGN( 32 / 8 );\r
+ __bootphase2_end__ = .;\r
+ } >ram AT>bootphase2\r
+ \r
+ .bss : {\r
+ __bss_start__ = .; \r
+ *(.bss)\r
+ } >ram\r
+ \r
+ . = ALIGN( 32 / 8 );\r
__bss_end__ = .;\r
}\r