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 | |
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')
-rw-r--r-- | ld/Makefile.am | 2 | ||||
-rw-r--r-- | ld/Makefile.in | 2 | ||||
-rw-r--r-- | ld/emulparams/avr1.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avr2.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avr25.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avr3.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avr31.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avr35.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avr4.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avr5.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avr51.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avr6.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avrtiny.sh | 10 | ||||
-rw-r--r-- | ld/emulparams/avrxmega1.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avrxmega2.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avrxmega3.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avrxmega4.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avrxmega5.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avrxmega6.sh | 8 | ||||
-rw-r--r-- | ld/emulparams/avrxmega7.sh | 8 | ||||
-rw-r--r-- | ld/scripttempl/avr.sc | 52 | ||||
-rw-r--r-- | ld/scripttempl/avrtiny.sc | 262 |
22 files changed, 181 insertions, 283 deletions
diff --git a/ld/Makefile.am b/ld/Makefile.am index 3aa7e80..b509e23 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -922,7 +922,7 @@ eavrxmega7.c: $(srcdir)/emulparams/avrxmega7.sh \ ${GEN_DEPENDS} eavrtiny.c: $(srcdir)/emulparams/avrtiny.sh \ - $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avrtiny.sc \ + $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \ ${GEN_DEPENDS} ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \ diff --git a/ld/Makefile.in b/ld/Makefile.in index f485f4f..b69d6b8 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -2486,7 +2486,7 @@ eavrxmega7.c: $(srcdir)/emulparams/avrxmega7.sh \ ${GEN_DEPENDS} eavrtiny.c: $(srcdir)/emulparams/avrtiny.sh \ - $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avrtiny.sc \ + $(srcdir)/emultempl/avrelf.em $(ELF_DEPS) $(srcdir)/scripttempl/avr.sc \ ${GEN_DEPENDS} ecoff_i860.c: $(srcdir)/emulparams/coff_i860.sh \ diff --git a/ld/emulparams/avr1.sh b/ld/emulparams/avr1.sh index 2f6af99..0fa6eed 100644 --- a/ld/emulparams/avr1.sh +++ b/ld/emulparams/avr1.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=8K DATA_ORIGIN=0x800060 DATA_LENGTH=0 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avr2.sh b/ld/emulparams/avr2.sh index cb35bb9..e0bdc21a 100644 --- a/ld/emulparams/avr2.sh +++ b/ld/emulparams/avr2.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=8K DATA_ORIGIN=0x800060 DATA_LENGTH=0xffa0 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avr25.sh b/ld/emulparams/avr25.sh index 2965347..4a6e0a3 100644 --- a/ld/emulparams/avr25.sh +++ b/ld/emulparams/avr25.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=8K DATA_ORIGIN=0x800060 DATA_LENGTH=0xffa0 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avr3.sh b/ld/emulparams/avr3.sh index a0b86c4..f02dd39 100644 --- a/ld/emulparams/avr3.sh +++ b/ld/emulparams/avr3.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=128K DATA_ORIGIN=0x800060 DATA_LENGTH=0xffa0 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avr31.sh b/ld/emulparams/avr31.sh index 6e1ee0a..0bf3c0f 100644 --- a/ld/emulparams/avr31.sh +++ b/ld/emulparams/avr31.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=128K DATA_ORIGIN=0x800060 DATA_LENGTH=0xffa0 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avr35.sh b/ld/emulparams/avr35.sh index abc6790..fe83dc8 100644 --- a/ld/emulparams/avr35.sh +++ b/ld/emulparams/avr35.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=64K DATA_ORIGIN=0x800060 DATA_LENGTH=0xffa0 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avr4.sh b/ld/emulparams/avr4.sh index deaf3e7..ccda23f 100644 --- a/ld/emulparams/avr4.sh +++ b/ld/emulparams/avr4.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=8K DATA_ORIGIN=0x800060 DATA_LENGTH=0xffa0 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avr5.sh b/ld/emulparams/avr5.sh index 2d0fc4f..64e9d66 100644 --- a/ld/emulparams/avr5.sh +++ b/ld/emulparams/avr5.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=128K DATA_ORIGIN=0x800060 DATA_LENGTH=0xffa0 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avr51.sh b/ld/emulparams/avr51.sh index 2069dfe..b097771 100644 --- a/ld/emulparams/avr51.sh +++ b/ld/emulparams/avr51.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=128K DATA_ORIGIN=0x800100 DATA_LENGTH=0xff00 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avr6.sh b/ld/emulparams/avr6.sh index c1a4fab..10efa6f 100644 --- a/ld/emulparams/avr6.sh +++ b/ld/emulparams/avr6.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=1024K DATA_ORIGIN=0x800200 DATA_LENGTH=0xfe00 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avrtiny.sh b/ld/emulparams/avrtiny.sh index b4ed14b..4aca22b 100644 --- a/ld/emulparams/avrtiny.sh +++ b/ld/emulparams/avrtiny.sh @@ -1,13 +1,19 @@ ARCH=avr:100 MACHINE= -SCRIPT_NAME=avrtiny +SCRIPT_NAME=avr OUTPUT_FORMAT="elf32-avr" MAXPAGESIZE=1 EMBEDDED=yes TEMPLATE_NAME=elf32 -TEXT_ORIGIN=0x0 TEXT_LENGTH=4K DATA_ORIGIN=0x0800040 DATA_LENGTH=0x100 +RODATA_PM_OFFSET=0x4000 EXTRA_EM_FILE=avrelf + +FUSE_NAME=config + +FUSE_LENGTH=2 +LOCK_LENGTH=2 +SIGNATURE_LENGTH=4 diff --git a/ld/emulparams/avrxmega1.sh b/ld/emulparams/avrxmega1.sh index 95e8aac..722ee18 100644 --- a/ld/emulparams/avrxmega1.sh +++ b/ld/emulparams/avrxmega1.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=1024K DATA_ORIGIN=0x802000 DATA_LENGTH=0xffa0 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avrxmega2.sh b/ld/emulparams/avrxmega2.sh index f282a69..d9211b2 100644 --- a/ld/emulparams/avrxmega2.sh +++ b/ld/emulparams/avrxmega2.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=1024K DATA_ORIGIN=0x802000 DATA_LENGTH=0xffa0 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avrxmega3.sh b/ld/emulparams/avrxmega3.sh index 7c5a1e5..b33f895 100644 --- a/ld/emulparams/avrxmega3.sh +++ b/ld/emulparams/avrxmega3.sh @@ -11,3 +11,11 @@ DATA_ORIGIN=0x802000 DATA_LENGTH=0xffa0 RODATA_PM_OFFSET=0x8000 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avrxmega4.sh b/ld/emulparams/avrxmega4.sh index 829c8b7..02ef7d7 100644 --- a/ld/emulparams/avrxmega4.sh +++ b/ld/emulparams/avrxmega4.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=1024K DATA_ORIGIN=0x802000 DATA_LENGTH=0xffa0 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avrxmega5.sh b/ld/emulparams/avrxmega5.sh index 0a09aee..93b69da 100644 --- a/ld/emulparams/avrxmega5.sh +++ b/ld/emulparams/avrxmega5.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=1024K DATA_ORIGIN=0x802000 DATA_LENGTH=0xffa0 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avrxmega6.sh b/ld/emulparams/avrxmega6.sh index 3c3a468..f7dae40 100644 --- a/ld/emulparams/avrxmega6.sh +++ b/ld/emulparams/avrxmega6.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=1024K DATA_ORIGIN=0x802000 DATA_LENGTH=0xffa0 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K diff --git a/ld/emulparams/avrxmega7.sh b/ld/emulparams/avrxmega7.sh index b84a0ba..578f52a 100644 --- a/ld/emulparams/avrxmega7.sh +++ b/ld/emulparams/avrxmega7.sh @@ -10,3 +10,11 @@ TEXT_LENGTH=1024K DATA_ORIGIN=0x802000 DATA_LENGTH=0xffa0 EXTRA_EM_FILE=avrelf + +FUSE_NAME=fuse + +EEPROM_LENGTH=64K +FUSE_LENGTH=1K +LOCK_LENGTH=1K +SIGNATURE_LENGTH=1K +USER_SIGNATURE_LENGTH=1K 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 |