]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - bootrom/ldscript-flash
New bootrom
[proxmark3-svn] / bootrom / ldscript-flash
index fa6fb26e4fec6cc4ce2dfe83a72a0eada3fdd75e..777ac8bc04c18fefe3a3c4f2abec041691ba280d 100644 (file)
@@ -1,32 +1,37 @@
-MEMORY \r
-{\r
-       /* AT91SAM7S256 has 256k Flash and 64k RAM */\r
-       /* Important note: the correct ORIGIN for bootphase1 is 0x00100000 and for bootphase2 is 0x00100200\r
-          However, this will confuse the currently deployed flash code which expects logical and and not\r
-          physical addresses and performs no sanity checks at all. If confronted with physical addresses, \r
-          it will happily erase everything and brick the device. So for the time being pretend these addresses\r
-          to start at 0x0 while updating all the flash code with proper sanity checks, then come back later and\r
-          fix the addresses. -- Henryk Plötz <henryk@ploetzli.ch> 2009-08-27 */\r
-        bootphase1 : ORIGIN = 0x00000000, LENGTH = 0x200 /* Phase 1 bootloader: Copies real bootloader to RAM */\r
-        bootphase2 : ORIGIN = 0x00000200, LENGTH = 0x2000 - 0x200 /* Main bootloader code, stored in Flash, executed from RAM */\r
-        ram     : ORIGIN = 0x00200000, LENGTH = 32K\r
-}\r
-\r
+INCLUDE ../common/ldscript.common\r
 \r
+ENTRY(flashstart)\r
 SECTIONS\r
 {\r
     . = 0;\r
     \r
-    bootphase1 : {\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 : {\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
@@ -40,4 +45,8 @@ SECTIONS
     \r
     . = ALIGN( 32 / 8 );\r
     __bss_end__ = .;\r
+    \r
+    .commonarea (NOLOAD) : {\r
+       *(.commonarea)\r
+    } >commonarea\r
 }\r
Impressum, Datenschutz