X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/8652988d62b19631e498b62a3800f0decb5e743a..6c5ad038603d132d10802eecbef5c2f2547d94ae:/bootrom/ldscript-flash?ds=sidebyside

diff --git a/bootrom/ldscript-flash b/bootrom/ldscript-flash
index fa6fb26e..ccc0db2f 100644
--- a/bootrom/ldscript-flash
+++ b/bootrom/ldscript-flash
@@ -1,32 +1,38 @@
-MEMORY 
-{
-	/* AT91SAM7S256 has 256k Flash and 64k RAM */
-	/* Important note: the correct ORIGIN for bootphase1 is 0x00100000 and for bootphase2 is 0x00100200
-	   However, this will confuse the currently deployed flash code which expects logical and and not
-	   physical addresses and performs no sanity checks at all. If confronted with physical addresses, 
-	   it will happily erase everything and brick the device. So for the time being pretend these addresses
-	   to start at 0x0 while updating all the flash code with proper sanity checks, then come back later and
-	   fix the addresses. -- Henryk Plötz <henryk@ploetzli.ch> 2009-08-27 */
-        bootphase1 : ORIGIN = 0x00000000, LENGTH = 0x200 /* Phase 1 bootloader: Copies real bootloader to RAM */
-        bootphase2 : ORIGIN = 0x00000200, LENGTH = 0x2000 - 0x200 /* Main bootloader code, stored in Flash, executed from RAM */
-        ram     : ORIGIN = 0x00200000, LENGTH = 32K
-}
-
+INCLUDE ../common/ldscript.common
 
+ENTRY(flashstart)
 SECTIONS
 {
     . = 0;
     
-    bootphase1 : {
+    .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 : {
+    __bootphase2_src_start__ = ORIGIN(bootphase2);
+    .bootphase2 : {
     	__bootphase2_start__ = .;
     	*(.startphase2)
     	*(.text)
+    	*(.eh_frame)
     	*(.glue_7)
+    	*(.glue_7t)
     	*(.rodata)
         *(.data)
     	. = ALIGN( 32 / 8 );
@@ -40,4 +46,8 @@ SECTIONS
     
     . = ALIGN( 32 / 8 );
     __bss_end__ = .;
+    
+    .commonarea (NOLOAD) : {
+    	*(.commonarea)
+    } >commonarea
 }