#! /bin/sh /usr/share/dpatch/dpatch-run ## 502-binutils-msp-ldscripts.dpatch by ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: Add new ldscripts for cpu variations of the msp430 architecture @DPATCH@ diff -ru binutils-2.17.orig/ld/scripttempl/elf32msp430.sc binutils-2.17/ld/scripttempl/elf32msp430.sc --- binutils-2.17.orig/ld/scripttempl/elf32msp430.sc 2008-05-23 02:00:49.049465400 +0300 +++ binutils-2.17/ld/scripttempl/elf32msp430.sc 2008-05-24 18:13:23.343750000 +0300 @@ -14,7 +14,7 @@ ${RELOCATING+ PROVIDE (__heap_bottom = .) ; } ${RELOCATING+ PROVIDE (__heap_top = ${HEAP_START} + ${HEAP_LENGTH}) ; } } ${RELOCATING+ > heap}" -HEAP_MEMORY_MSP430="heap(rwx) : ORIGIN = $HEAP_START, LENGTH = $HEAP_LENGTH" +HEAP_MEMORY_MSP430="heap(rwx) : ORIGIN = $HEAP_START, LENGTH = $HEAP_LENGTH" fi @@ -24,12 +24,12 @@ MEMORY { - text (rx) : ORIGIN = $ROM_START, LENGTH = $ROM_SIZE - data (rwx) : ORIGIN = $RAM_START, LENGTH = $RAM_SIZE - vectors (rw) : ORIGIN = $VECTORS_START LENGTH = $VECTORS_SIZE - bootloader(rx) : ORIGIN = 0x0c00, LENGTH = 1K - infomem(rx) : ORIGIN = 0x1000, LENGTH = 256 - infomemnobits(rx) : ORIGIN = 0x1000, LENGTH = 256 + text (rx) : ORIGIN = $ROM_START, LENGTH = $ROM_SIZE + data (rwx) : ORIGIN = $RAM_START, LENGTH = $RAM_SIZE + vectors (rw) : ORIGIN = $VECTORS_START, LENGTH = $VECTORS_SIZE + bootloader(rx) : ORIGIN = 0x0c00, LENGTH = 1K + infomem(rx) : ORIGIN = 0x1000, LENGTH = 256 + infomemnobits(rx) : ORIGIN = 0x1000, LENGTH = 256 ${HEAP_MEMORY_MSP430} } @@ -100,22 +100,35 @@ { ${RELOCATING+. = ALIGN(2);} *(.init) - *(.init0) /* Start here after reset. */ - *(.init1) - *(.init2) /* Copy data loop */ - *(.init3) - *(.init4) /* Clear bss */ - *(.init5) - *(.init6) /* C++ constructors. */ - *(.init7) - *(.init8) - *(.init9) /* Call main(). */ + KEEP(*(.init)) + *(.init0) /* Start here after reset. */ + KEEP(*(.init0)) + *(.init1) /* User definable. */ + KEEP(*(.init1)) + *(.init2) /* Initialize stack. */ + KEEP(*(.init2)) + *(.init3) /* Initialize hardware, user definable. */ + KEEP(*(.init3)) + *(.init4) /* Copy data to .data, clear bss. */ + KEEP(*(.init4)) + *(.init5) /* User definable. */ + KEEP(*(.init5)) + *(.init6) /* C++ constructors. */ + KEEP(*(.init6)) + *(.init7) /* User definable. */ + KEEP(*(.init7)) + *(.init8) /* User definable. */ + KEEP(*(.init8)) + *(.init9) /* Call main(). */ + KEEP(*(.init9)) ${CONSTRUCTING+ __ctors_start = . ; } ${CONSTRUCTING+ *(.ctors) } + ${CONSTRUCTING+ KEEP(*(.ctors)) } ${CONSTRUCTING+ __ctors_end = . ; } ${CONSTRUCTING+ __dtors_start = . ; } ${CONSTRUCTING+ *(.dtors) } + ${CONSTRUCTING+ KEEP(*(.dtors)) } ${CONSTRUCTING+ __dtors_end = . ; } ${RELOCATING+. = ALIGN(2);} @@ -124,31 +137,45 @@ *(.text.*) ${RELOCATING+. = ALIGN(2);} - *(.fini9) /* */ - *(.fini8) - *(.fini7) - *(.fini6) /* C++ destructors. */ - *(.fini5) - *(.fini4) - *(.fini3) - *(.fini2) - *(.fini1) + *(.fini9) /* Jumps here after main(). User definable. */ + KEEP(*(.fini9)) + *(.fini8) /* User definable. */ + KEEP(*(.fini8)) + *(.fini7) /* User definable. */ + KEEP(*(.fini7)) + *(.fini6) /* C++ destructors. */ + KEEP(*(.fini6)) + *(.fini5) /* User definable. */ + KEEP(*(.fini5)) + *(.fini4) /* User definable. */ + KEEP(*(.fini4)) + *(.fini3) /* User definable. */ + KEEP(*(.fini3)) + *(.fini2) /* User definable. */ + KEEP(*(.fini2)) + *(.fini1) /* User definable. */ + KEEP(*(.fini1)) *(.fini0) /* Infinite loop after program termination. */ + KEEP(*(.fini0)) *(.fini) + KEEP(*(.fini)) _etext = .; } ${RELOCATING+ > text} - .data ${RELOCATING-0} : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))} + .data ${RELOCATING-0} : { ${RELOCATING+ PROVIDE (__data_start = .) ; } ${RELOCATING+. = ALIGN(2);} *(.data) + *(SORT_BY_ALIGNMENT(.data.*)) ${RELOCATING+. = ALIGN(2);} *(.gnu.linkonce.d*) ${RELOCATING+. = ALIGN(2);} ${RELOCATING+ _edata = . ; } - } ${RELOCATING+ > data} + } ${RELOCATING+ > data AT > text} + ${RELOCATING+ PROVIDE (__data_load_start = LOADADDR(.data) ); } + ${RELOCATING+ PROVIDE (__data_size = SIZEOF(.data) ); } /* Bootloader. */ .bootloader ${RELOCATING-0} : @@ -175,19 +202,22 @@ *(.infomemnobits.*) } ${RELOCATING+ > infomemnobits} - .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} : + .bss ${RELOCATING-0} : { ${RELOCATING+ PROVIDE (__bss_start = .) ; } *(.bss) + *(SORT_BY_ALIGNMENT(.bss.*)) *(COMMON) ${RELOCATING+ PROVIDE (__bss_end = .) ; } ${RELOCATING+ _end = . ; } } ${RELOCATING+ > data} + ${RELOCATING+ PROVIDE (__bss_size = SIZEOF(.bss) ); } - .noinit ${RELOCATING+ SIZEOF(.bss) + ADDR(.bss)} : + .noinit ${RELOCATING-0} : { ${RELOCATING+ PROVIDE (__noinit_start = .) ; } *(.noinit) + *(.noinit.*) *(COMMON) ${RELOCATING+ PROVIDE (__noinit_end = .) ; } ${RELOCATING+ _end = . ; } @@ -197,6 +227,7 @@ { ${RELOCATING+ PROVIDE (__vectors_start = .) ; } *(.vectors*) + KEEP(*(.vectors*)) ${RELOCATING+ _vectors_end = . ; } } ${RELOCATING+ > vectors} diff -ru binutils-2.17.orig/ld/scripttempl/elf32msp430_3.sc binutils-2.17/ld/scripttempl/elf32msp430_3.sc --- binutils-2.17.orig/ld/scripttempl/elf32msp430_3.sc 2008-05-23 02:00:49.033840400 +0300 +++ binutils-2.17/ld/scripttempl/elf32msp430_3.sc 2008-05-24 17:50:27.953125000 +0300 @@ -6,7 +6,7 @@ { text (rx) : ORIGIN = $ROM_START, LENGTH = $ROM_SIZE data (rwx) : ORIGIN = $RAM_START, LENGTH = $RAM_SIZE - vectors (rw) : ORIGIN = $VECTORS_START LENGTH = $VECTORS_SIZE + vectors (rw) : ORIGIN = $VECTORS_START, LENGTH = $VECTORS_SIZE } SECTIONS @@ -76,22 +76,35 @@ { ${RELOCATING+. = ALIGN(2);} *(.init) - *(.init0) /* Start here after reset. */ - *(.init1) - *(.init2) - *(.init3) - *(.init4) - *(.init5) - *(.init6) /* C++ constructors. */ - *(.init7) - *(.init8) - *(.init9) /* Call main(). */ + KEEP(*(.init)) + *(.init0) /* Start here after reset. */ + KEEP(*(.init0)) + *(.init1) /* User definable. */ + KEEP(*(.init1)) + *(.init2) /* Initialize stack. */ + KEEP(*(.init2)) + *(.init3) /* Initialize hardware, user definable. */ + KEEP(*(.init3)) + *(.init4) /* Copy data to .data, clear bss. */ + KEEP(*(.init4)) + *(.init5) /* User definable. */ + KEEP(*(.init5)) + *(.init6) /* C++ constructors. */ + KEEP(*(.init6)) + *(.init7) /* User definable. */ + KEEP(*(.init7)) + *(.init8) /* User definable. */ + KEEP(*(.init8)) + *(.init9) /* Call main(). */ + KEEP(*(.init9)) ${CONSTRUCTING+ __ctors_start = . ; } ${CONSTRUCTING+ *(.ctors) } + ${CONSTRUCTING+ KEEP(*(.ctors)) } ${CONSTRUCTING+ __ctors_end = . ; } ${CONSTRUCTING+ __dtors_start = . ; } ${CONSTRUCTING+ *(.dtors) } + ${CONSTRUCTING+ KEEP(*(.dtors)) } ${CONSTRUCTING+ __dtors_end = . ; } ${RELOCATING+. = ALIGN(2);} @@ -100,43 +113,60 @@ *(.text.*) ${RELOCATING+. = ALIGN(2);} - *(.fini9) - *(.fini8) - *(.fini7) - *(.fini6) /* C++ destructors. */ - *(.fini5) - *(.fini4) - *(.fini3) - *(.fini2) - *(.fini1) + *(.fini9) /* Jumps here after main(). User definable. */ + KEEP(*(.fini9)) + *(.fini8) /* User definable. */ + KEEP(*(.fini8)) + *(.fini7) /* User definable. */ + KEEP(*(.fini7)) + *(.fini6) /* C++ destructors. */ + KEEP(*(.fini6)) + *(.fini5) /* User definable. */ + KEEP(*(.fini5)) + *(.fini4) /* User definable. */ + KEEP(*(.fini4)) + *(.fini3) /* User definable. */ + KEEP(*(.fini3)) + *(.fini2) /* User definable. */ + KEEP(*(.fini2)) + *(.fini1) /* User definable. */ + KEEP(*(.fini1)) *(.fini0) /* Infinite loop after program termination. */ + KEEP(*(.fini0)) *(.fini) + KEEP(*(.fini)) ${RELOCATING+ _etext = . ; } } ${RELOCATING+ > text} - .data ${RELOCATING-0} : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))} + .data ${RELOCATING-0} : { ${RELOCATING+ PROVIDE (__data_start = .) ; } *(.data) + *(SORT_BY_ALIGNMENT(.data.*)) *(.gnu.linkonce.d*) ${RELOCATING+. = ALIGN(2);} ${RELOCATING+ _edata = . ; } - } ${RELOCATING+ > data} + } ${RELOCATING+ > data AT > text} + ${RELOCATING+ PROVIDE (__data_load_start = LOADADDR(.data) ); } + ${RELOCATING+ PROVIDE (__data_size = SIZEOF(.data) ); } - .bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} : + .bss ${RELOCATING-0} : { ${RELOCATING+ PROVIDE (__bss_start = .) ; } *(.bss) + *(SORT_BY_ALIGNMENT(.bss.*)) *(COMMON) ${RELOCATING+ PROVIDE (__bss_end = .) ; } ${RELOCATING+ _end = . ; } } ${RELOCATING+ > data} + ${RELOCATING+ PROVIDE (__bss_size = SIZEOF(.bss) ); } - .noinit ${RELOCATING+ SIZEOF(.bss) + ADDR(.bss)} : + .noinit ${RELOCATING-0} : { ${RELOCATING+ PROVIDE (__noinit_start = .) ; } *(.noinit) + *(SORT_BY_ALIGNMENT(.noinit.*)) *(COMMON) ${RELOCATING+ PROVIDE (__noinit_end = .) ; } ${RELOCATING+ _end = . ; } @@ -146,6 +176,7 @@ { ${RELOCATING+ PROVIDE (__vectors_start = .) ; } *(.vectors*) + KEEP(*(.vectors*)) ${RELOCATING+ _vectors_end = . ; } } ${RELOCATING+ > vectors}