]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - bootrom/ldscript-flash
Implemented `data hex2bin` and `data bin2hex` as per suggestion in http://www.proxmar...
[proxmark3-svn] / bootrom / ldscript-flash
index 0c637113572ea2e6a0d2bc54b1e64b036c37f6f1..f1bab1494e856cc81c28299efd101350452b0f2b 100644 (file)
@@ -1,53 +1,63 @@
+/*
+-----------------------------------------------------------------------------
+ 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
 
+PHDRS
+{
+       phase1 PT_LOAD;
+       phase2 PT_LOAD;
+       bss PT_LOAD;
+}
+
 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
+       .bootphase1 : {
+               *(.startup)
+
+               . = ALIGN(4);
+               _version_information_start = .;
+               KEEP(*(.version_information));
+
+               . = LENGTH(bootphase1) - 0x4;
+               LONG(_version_information_start);
+       } >bootphase1 :phase1
+
+       .bootphase2 : {
+               *(.startphase2)
+               *(.text)
+               *(.text.*)
+               *(.eh_frame)
+               *(.glue_7)
+               *(.glue_7t)
+               *(.rodata)
+               *(.rodata.*)
+               *(.data)
+               *(.data.*)
+               . = ALIGN(4);
+       } >ram AT>bootphase2 :phase2
+
+       __bootphase2_src_start__ = LOADADDR(.bootphase2);
+       __bootphase2_start__ = ADDR(.bootphase2);
+       __bootphase2_end__ = __bootphase2_start__ + SIZEOF(.bootphase2);
+
+       .bss : {
+               __bss_start__ = .;
+               *(.bss)
+               *(.bss.*)
+               . = ALIGN(4);
+               __bss_end__ = .;
+       } >ram AT>ram :bss
+
+       .commonarea (NOLOAD) : {
+               *(.commonarea)
+       } >commonarea
 }
Impressum, Datenschutz