diff options
author | Georg-Johann Lay <avr@gjlay.de> | 2017-06-13 16:50:26 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2017-06-13 16:50:26 +0100 |
commit | 6490dc678bc35f2204afb38449de5127ef8bcca0 (patch) | |
tree | 7b90f28032aa8c798149c76a5fbae3cb993ca9e8 /ld/scripttempl | |
parent | dc74becf498f60c842d81eb6e98cfcbc3f167c22 (diff) | |
download | gdb-6490dc678bc35f2204afb38449de5127ef8bcca0.zip gdb-6490dc678bc35f2204afb38449de5127ef8bcca0.tar.gz gdb-6490dc678bc35f2204afb38449de5127ef8bcca0.tar.bz2 |
Replace multiple AVR scripts with a single, customizable linker script.
PR ld/21569
* scripttempl/avrtiny.sc: Remove file.
* Makefile.am (eavrtiny.c): Depend on avr.sc, no more on avrtiny.sc.
* Makefile.in: Regenerate.
* emulparams/avrtiny.sh (SCRIPT_NAME): Set var to "avr".
(TEXT_ORIGIN): Remove var.
(FUSE_NAME, FUSE_LENGTH, LOCK_LENGTH, SIGNATURE_LENGTH)
(RODATA_PM_OFFSET): Set new vars.
* emulparams/avr1.sh (FUSE_NAME, EEPROM_LENGTH, FUSE_LENGTH)
(LOCK_LENGTH, SIGNATURE_LENGTH, USER_SIGNATURE_LENGTH): Set new vars.
* emulparams/avr2.sh: Same.
* emulparams/avr25.sh: Same.
* emulparams/avr3.sh: Same.
* emulparams/avr31.sh: Same.
* emulparams/avr35.sh: Same.
* emulparams/avr4.sh: Same.
* emulparams/avr5.sh: Same.
* emulparams/avr51.sh: Same.
* emulparams/avr6.sh: Same.
* emulparams/avrxmega1.sh: Same.
* emulparams/avrxmega2.sh: Same.
* emulparams/avrxmega3.sh: Same.
* emulparams/avrxmega4.sh: Same.
* emulparams/avrxmega5.sh: Same.
* emulparams/avrxmega6.sh: Same.
* emulparams/avrxmega7.sh: Same.
* scripttempl/avr.sc (__EEPROM_REGION_LENGTH__): Only define
if EEPROM_LENGTH is set.
(MEMORY) [eeprom]: Same.
(SECTIONS) [.eeprom]: Same for output section.
(__USER_SIGNATURE_REGION_LENGTH__): Only define if
USER_SIGNATURE_LENGTH is set.
(MEMORY) [user_signatures]: Same.
(SECTIONS) [.fuse]: Only define output section if FUSE_NAME = fuse.
(SECTIONS) [.config]: Only define output section if FUSE_NAME = config.
Diffstat (limited to 'ld/scripttempl')
-rw-r--r-- | ld/scripttempl/avr.sc | 52 | ||||
-rw-r--r-- | ld/scripttempl/avrtiny.sc | 262 |
2 files changed, 35 insertions, 279 deletions
diff --git a/ld/scripttempl/avr.sc b/ld/scripttempl/avr.sc index 144d32d..1b74dc4 100644 --- a/ld/scripttempl/avr.sc +++ b/ld/scripttempl/avr.sc @@ -27,29 +27,21 @@ OUTPUT_ARCH(${ARCH}) __TEXT_REGION_LENGTH__ = DEFINED(__TEXT_REGION_LENGTH__) ? __TEXT_REGION_LENGTH__ : $TEXT_LENGTH; __DATA_REGION_LENGTH__ = DEFINED(__DATA_REGION_LENGTH__) ? __DATA_REGION_LENGTH__ : $DATA_LENGTH; -__EEPROM_REGION_LENGTH__ = DEFINED(__EEPROM_REGION_LENGTH__) ? __EEPROM_REGION_LENGTH__ : 64K; -__FUSE_REGION_LENGTH__ = DEFINED(__FUSE_REGION_LENGTH__) ? __FUSE_REGION_LENGTH__ : 1K; -__LOCK_REGION_LENGTH__ = DEFINED(__LOCK_REGION_LENGTH__) ? __LOCK_REGION_LENGTH__ : 1K; -__SIGNATURE_REGION_LENGTH__ = DEFINED(__SIGNATURE_REGION_LENGTH__) ? __SIGNATURE_REGION_LENGTH__ : 1K; -__USER_SIGNATURE_REGION_LENGTH__ = DEFINED(__USER_SIGNATURE_REGION_LENGTH__) ? __USER_SIGNATURE_REGION_LENGTH__ : 1K; -EOF - -if test -n "$RODATA_PM_OFFSET"; then - cat <<EOF -__RODATA_PM_OFFSET__ = DEFINED(__RODATA_PM_OFFSET__) ? __RODATA_PM_OFFSET__ : $RODATA_PM_OFFSET; -EOF -fi - -cat <<EOF +${EEPROM_LENGTH+__EEPROM_REGION_LENGTH__ = DEFINED(__EEPROM_REGION_LENGTH__) ? __EEPROM_REGION_LENGTH__ : $EEPROM_LENGTH;} +__FUSE_REGION_LENGTH__ = DEFINED(__FUSE_REGION_LENGTH__) ? __FUSE_REGION_LENGTH__ : $FUSE_LENGTH; +__LOCK_REGION_LENGTH__ = DEFINED(__LOCK_REGION_LENGTH__) ? __LOCK_REGION_LENGTH__ : $LOCK_LENGTH; +__SIGNATURE_REGION_LENGTH__ = DEFINED(__SIGNATURE_REGION_LENGTH__) ? __SIGNATURE_REGION_LENGTH__ : $SIGNATURE_LENGTH; +${USER_SIGNATURE_LENGTH+__USER_SIGNATURE_REGION_LENGTH__ = DEFINED(__USER_SIGNATURE_REGION_LENGTH__) ? __USER_SIGNATURE_REGION_LENGTH__ : $USER_SIGNATURE_LENGTH;} +${RODATA_PM_OFFSET+__RODATA_PM_OFFSET__ = DEFINED(__RODATA_PM_OFFSET__) ? __RODATA_PM_OFFSET__ : $RODATA_PM_OFFSET;} MEMORY { text (rx) : ORIGIN = 0, LENGTH = __TEXT_REGION_LENGTH__ data (rw!x) : ORIGIN = $DATA_ORIGIN, LENGTH = __DATA_REGION_LENGTH__ - eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = __EEPROM_REGION_LENGTH__ - fuse (rw!x) : ORIGIN = 0x820000, LENGTH = __FUSE_REGION_LENGTH__ +${EEPROM_LENGTH+ eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = __EEPROM_REGION_LENGTH__} + $FUSE_NAME (rw!x) : ORIGIN = 0x820000, LENGTH = __FUSE_REGION_LENGTH__ lock (rw!x) : ORIGIN = 0x830000, LENGTH = __LOCK_REGION_LENGTH__ signature (rw!x) : ORIGIN = 0x840000, LENGTH = __SIGNATURE_REGION_LENGTH__ - user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = __USER_SIGNATURE_REGION_LENGTH__ +${USER_SIGNATURE_LENGTH+ user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = __USER_SIGNATURE_REGION_LENGTH__} } SECTIONS @@ -271,6 +263,10 @@ cat <<EOF ${RELOCATING+ _end = . ; } ${RELOCATING+ PROVIDE (__heap_start = .) ; } } ${RELOCATING+ > data} +EOF + +if test -n "${EEPROM_LENGTH}"; then +cat <<EOF .eeprom ${RELOCATING-0}: { @@ -278,6 +274,11 @@ cat <<EOF KEEP(*(.eeprom*)) ${RELOCATING+ __eeprom_end = . ; } } ${RELOCATING+ > eeprom} +EOF +fi + +if test "$FUSE_NAME" = "fuse" ; then +cat <<EOF .fuse ${RELOCATING-0}: { @@ -286,6 +287,10 @@ cat <<EOF KEEP(*(.hfuse)) KEEP(*(.efuse)) } ${RELOCATING+ > fuse} +EOF +fi + +cat <<EOF .lock ${RELOCATING-0}: { @@ -296,6 +301,19 @@ cat <<EOF { KEEP(*(.signature*)) } ${RELOCATING+ > signature} +EOF + +if test "$FUSE_NAME" = "config" ; then +cat <<EOF + + .config ${RELOCATING-0}: + { + KEEP(*(.config*)) + } ${RELOCATING+ > config} +EOF +fi + +cat <<EOF /* Stabs debugging sections. */ .stab 0 : { *(.stab) } diff --git a/ld/scripttempl/avrtiny.sc b/ld/scripttempl/avrtiny.sc deleted file mode 100644 index 5a6d4ae..0000000 --- a/ld/scripttempl/avrtiny.sc +++ /dev/null @@ -1,262 +0,0 @@ -# Copyright (C) 2014-2017 Free Software Foundation, Inc. -# -# Copying and distribution of this file, with or without modification, -# are permitted in any medium without royalty provided the copyright -# notice and this notice are preserved. - -cat <<EOF -/* Copyright (C) 2014-2017 Free Software Foundation, Inc. - - Copying and distribution of this script, with or without modification, - are permitted in any medium without royalty provided the copyright - notice and this notice are preserved. */ - -OUTPUT_FORMAT("${OUTPUT_FORMAT}","${OUTPUT_FORMAT}","${OUTPUT_FORMAT}") -OUTPUT_ARCH(${ARCH}) - -__TEXT_REGION_LENGTH__ = DEFINED(__TEXT_REGION_LENGTH__) ? __TEXT_REGION_LENGTH__ : $TEXT_LENGTH; -__DATA_REGION_LENGTH__ = DEFINED(__DATA_REGION_LENGTH__) ? __DATA_REGION_LENGTH__ : $DATA_LENGTH; -__FUSE_REGION_LENGTH__ = DEFINED(__FUSE_REGION_LENGTH__) ? __FUSE_REGION_LENGTH__ : 2; -__LOCK_REGION_LENGTH__ = DEFINED(__LOCK_REGION_LENGTH__) ? __LOCK_REGION_LENGTH__ : 2; -__SIGNATURE_REGION_LENGTH__ = DEFINED(__SIGNATURE_REGION_LENGTH__) ? __SIGNATURE_REGION_LENGTH__ : 4; -__RODATA_PM_OFFSET__ = DEFINED(__RODATA_PM_OFFSET__) ? __RODATA_PM_OFFSET__ : 0x4000; - -MEMORY -{ - text (rx) : ORIGIN = $TEXT_ORIGIN, LENGTH = __TEXT_REGION_LENGTH__ - data (rw!x) : ORIGIN = $DATA_ORIGIN, LENGTH = __DATA_REGION_LENGTH__ - - /* Provide offsets for config, lock and signature to match - production file format. Ignore offsets in datasheet. */ - - config (rw!x) : ORIGIN = 0x820000, LENGTH = __FUSE_REGION_LENGTH__ - lock (rw!x) : ORIGIN = 0x830000, LENGTH = __LOCK_REGION_LENGTH__ - signature (rw!x) : ORIGIN = 0x840000, LENGTH = __SIGNATURE_REGION_LENGTH__ -} - -SECTIONS -{ - /* Read-only sections, merged into text segment: */ - ${TEXT_DYNAMIC+${DYNAMIC}} - .hash ${RELOCATING-0} : { *(.hash) } - .dynsym ${RELOCATING-0} : { *(.dynsym) } - .dynstr ${RELOCATING-0} : { *(.dynstr) } - .gnu.version ${RELOCATING-0} : { *(.gnu.version) } - .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) } - .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) } - - .rel.init ${RELOCATING-0} : { *(.rel.init) } - .rela.init ${RELOCATING-0} : { *(.rela.init) } - .rel.text ${RELOCATING-0} : - { - *(.rel.text) - ${RELOCATING+*(.rel.text.*)} - ${RELOCATING+*(.rel.gnu.linkonce.t*)} - } - .rela.text ${RELOCATING-0} : - { - *(.rela.text) - ${RELOCATING+*(.rela.text.*)} - ${RELOCATING+*(.rela.gnu.linkonce.t*)} - } - .rel.fini ${RELOCATING-0} : { *(.rel.fini) } - .rela.fini ${RELOCATING-0} : { *(.rela.fini) } - .rel.rodata ${RELOCATING-0} : - { - *(.rel.rodata) - ${RELOCATING+*(.rel.rodata.*)} - ${RELOCATING+*(.rel.gnu.linkonce.r*)} - } - .rela.rodata ${RELOCATING-0} : - { - *(.rela.rodata) - ${RELOCATING+*(.rela.rodata.*)} - ${RELOCATING+*(.rela.gnu.linkonce.r*)} - } - .rel.data ${RELOCATING-0} : - { - *(.rel.data) - ${RELOCATING+*(.rel.data.*)} - ${RELOCATING+*(.rel.gnu.linkonce.d*)} - } - .rela.data ${RELOCATING-0} : - { - *(.rela.data) - ${RELOCATING+*(.rela.data.*)} - ${RELOCATING+*(.rela.gnu.linkonce.d*)} - } - .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } - .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } - .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } - .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } - .rel.got ${RELOCATING-0} : { *(.rel.got) } - .rela.got ${RELOCATING-0} : { *(.rela.got) } - .rel.bss ${RELOCATING-0} : { *(.rel.bss) } - .rela.bss ${RELOCATING-0} : { *(.rela.bss) } - .rel.plt ${RELOCATING-0} : { *(.rel.plt) } - .rela.plt ${RELOCATING-0} : { *(.rela.plt) } - - /* Internal text space or external memory. */ - .text ${RELOCATING-0} : - { - *(.vectors) - KEEP(*(.vectors)) - - /* For data that needs to reside in the lower 64k of progmem. */ - ${RELOCATING+ *(.progmem.gcc*)} - - /* PR 13812: Placing the trampolines here gives a better chance - that they will be in range of the code that uses them. */ - ${RELOCATING+. = ALIGN(2);} - ${CONSTRUCTING+ __trampolines_start = . ; } - /* The jump trampolines for the 16-bit limited relocs will reside here. */ - *(.trampolines) - ${RELOCATING+ *(.trampolines*)} - ${CONSTRUCTING+ __trampolines_end = . ; } - - /* avr-libc expects these data to reside in lower 64K. */ - ${RELOCATING+ *libprintf_flt.a:*(.progmem.data)} - ${RELOCATING+ *libc.a:*(.progmem.data)} - - ${RELOCATING+ *(.progmem*)} - - ${RELOCATING+. = ALIGN(2);} - - /* For future tablejump instruction arrays for 3 byte pc devices. - We don't relax jump/call instructions within these sections. */ - *(.jumptables) - ${RELOCATING+ *(.jumptables*)} - - /* For code that needs to reside in the lower 128k progmem. */ - *(.lowtext) - ${RELOCATING+ *(.lowtext*)} - - ${CONSTRUCTING+ __ctors_start = . ; } - ${CONSTRUCTING+ *(.ctors) } - ${CONSTRUCTING+ __ctors_end = . ; } - ${CONSTRUCTING+ __dtors_start = . ; } - ${CONSTRUCTING+ *(.dtors) } - ${CONSTRUCTING+ __dtors_end = . ; } - KEEP(SORT(*)(.ctors)) - KEEP(SORT(*)(.dtors)) - - /* From this point on, we don't bother about wether the insns are - below or above the 16 bits boundary. */ - *(.init0) /* Start here after reset. */ - KEEP (*(.init0)) - *(.init1) - KEEP (*(.init1)) - *(.init2) /* Clear __zero_reg__, set up stack pointer. */ - KEEP (*(.init2)) - *(.init3) - KEEP (*(.init3)) - *(.init4) /* Initialize data and BSS. */ - KEEP (*(.init4)) - *(.init5) - KEEP (*(.init5)) - *(.init6) /* C++ constructors. */ - KEEP (*(.init6)) - *(.init7) - KEEP (*(.init7)) - *(.init8) - KEEP (*(.init8)) - *(.init9) /* Call main(). */ - KEEP (*(.init9)) - *(.text) - ${RELOCATING+. = ALIGN(2);} - ${RELOCATING+ *(.text.*)} - ${RELOCATING+. = ALIGN(2);} - *(.fini9) /* _exit() starts here. */ - KEEP (*(.fini9)) - *(.fini8) - KEEP (*(.fini8)) - *(.fini7) - KEEP (*(.fini7)) - *(.fini6) /* C++ destructors. */ - KEEP (*(.fini6)) - *(.fini5) - KEEP (*(.fini5)) - *(.fini4) - KEEP (*(.fini4)) - *(.fini3) - KEEP (*(.fini3)) - *(.fini2) - KEEP (*(.fini2)) - *(.fini1) - KEEP (*(.fini1)) - *(.fini0) /* Infinite loop after program termination. */ - KEEP (*(.fini0)) - ${RELOCATING+ _etext = . ; } - } ${RELOCATING+ > text} - - .rodata ${RELOCATING+ ADDR(.text) + SIZEOF (.text) + __RODATA_PM_OFFSET__ } ${RELOCATING-0} : - { - *(.rodata) - ${RELOCATING+ *(.rodata*)} - *(.gnu.linkonce.r*) - } ${RELOCATING+AT> text} - - .data ${RELOCATING-0} : - { - ${RELOCATING+ PROVIDE (__data_start = .) ; } - *(.data) - ${RELOCATING+ *(.data*)} - *(.gnu.linkonce.d*) - ${RELOCATING+. = ALIGN(2);} - ${RELOCATING+ _edata = . ; } - ${RELOCATING+ PROVIDE (__data_end = .) ; } - } ${RELOCATING+ > data ${RELOCATING+AT> text}} - - .bss ${RELOCATING+ ADDR(.data) + SIZEOF (.data)} ${RELOCATING-0} :${RELOCATING+ AT (ADDR (.bss))} - { - ${RELOCATING+ PROVIDE (__bss_start = .) ; } - *(.bss) - ${RELOCATING+ *(.bss*)} - *(COMMON) - ${RELOCATING+ PROVIDE (__bss_end = .) ; } - } ${RELOCATING+ > data} - - ${RELOCATING+ __data_load_start = LOADADDR(.data); } - ${RELOCATING+ __data_load_end = __data_load_start + SIZEOF(.data); } - - /* Global data not cleared after reset. */ - .noinit ${RELOCATING+ ADDR(.bss) + SIZEOF (.bss)} ${RELOCATING-0} : ${RELOCATING+ AT (ADDR (.noinit))} - { - ${RELOCATING+ PROVIDE (__noinit_start = .) ; } - *(.noinit*) - ${RELOCATING+ PROVIDE (__noinit_end = .) ; } - ${RELOCATING+ _end = . ; } - ${RELOCATING+ PROVIDE (__heap_start = .) ; } - } ${RELOCATING+ > data} - - .lock ${RELOCATING-0}: - { - KEEP(*(.lock*)) - } ${RELOCATING+ > lock} - - .signature ${RELOCATING-0}: - { - KEEP(*(.signature*)) - } ${RELOCATING+ > signature} - - .config ${RELOCATING-0}: - { - KEEP(*(.config*)) - } ${RELOCATING+ > config} - - /* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - .comment 0 : { *(.comment) } - .note.gnu.build-id : { *(.note.gnu.build-id) } -EOF - -. $srcdir/scripttempl/DWARF.sc - -cat <<EOF -} -EOF |