-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
- __bss_end__ = .;\r
-}\r
+/*
+-----------------------------------------------------------------------------
+ This code is licensed to you under the terms of the GNU GPL, version 2 or,
+ at your option, any later version. See the LICENSE.txt file for the text of
+ the license.
+-----------------------------------------------------------------------------
+ Bootrom linker script
+-----------------------------------------------------------------------------
+*/
+
+INCLUDE ../common/ldscript.common
+
+ENTRY(flashstart)
+SECTIONS
+{
+ . = 0;
+
+ .bootphase1 : {
+ *(.startup)
+ *(.bootphase1)
+
+ /* It seems to be impossible to flush align a section at the
+ end of a memory segment. Instead, we'll put the version_information
+ wherever the linker wants it, and then put a pointer to the start
+ of the version information at the end of the section.
+ -- Henryk Plötz <henryk@ploetzli.ch> 2009-08-28 */
+
+ _version_information_start = ABSOLUTE(.);
+ *(.version_information);
+
+ /* Why doesn't this work even though _bootphase1_version_pointer = 0x1001fc?
+ . = _bootphase1_version_pointer - ORIGIN(bootphase1); */
+ /* This works, apparently it fools the linker into accepting an absolute address */
+ . = _bootphase1_version_pointer - ORIGIN(bootphase1) + ORIGIN(bootphase1);
+ LONG(_version_information_start)
+ } >bootphase1
+
+ __bootphase2_src_start__ = ORIGIN(bootphase2);
+ .bootphase2 : {
+ __bootphase2_start__ = .;
+ *(.startphase2)
+ *(.text)
+ *(.eh_frame)
+ *(.glue_7)
+ *(.glue_7t)
+ *(.rodata)
+ *(.data)
+ . = ALIGN( 32 / 8 );
+ __bootphase2_end__ = .;
+ } >ram AT>bootphase2
+
+ .bss : {
+ __bss_start__ = .;
+ *(.bss)
+ } >ram
+
+ . = ALIGN( 32 / 8 );
+ __bss_end__ = .;
+
+ .commonarea (NOLOAD) : {
+ *(.commonarea)
+ } >commonarea
+}