From 6490dc678bc35f2204afb38449de5127ef8bcca0 Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay Date: Tue, 13 Jun 2017 16:50:26 +0100 Subject: 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. --- ld/Makefile.am | 2 +- ld/Makefile.in | 2 +- ld/emulparams/avr1.sh | 8 ++ ld/emulparams/avr2.sh | 8 ++ ld/emulparams/avr25.sh | 8 ++ ld/emulparams/avr3.sh | 8 ++ ld/emulparams/avr31.sh | 8 ++ ld/emulparams/avr35.sh | 8 ++ ld/emulparams/avr4.sh | 8 ++ ld/emulparams/avr5.sh | 8 ++ ld/emulparams/avr51.sh | 8 ++ ld/emulparams/avr6.sh | 8 ++ ld/emulparams/avrtiny.sh | 10 +- ld/emulparams/avrxmega1.sh | 8 ++ ld/emulparams/avrxmega2.sh | 8 ++ ld/emulparams/avrxmega3.sh | 8 ++ ld/emulparams/avrxmega4.sh | 8 ++ ld/emulparams/avrxmega5.sh | 8 ++ ld/emulparams/avrxmega6.sh | 8 ++ ld/emulparams/avrxmega7.sh | 8 ++ ld/scripttempl/avr.sc | 52 ++++++--- ld/scripttempl/avrtiny.sc | 262 --------------------------------------------- 22 files changed, 181 insertions(+), 283 deletions(-) delete mode 100644 ld/scripttempl/avrtiny.sc 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 < data} +EOF + +if test -n "${EEPROM_LENGTH}"; then +cat < eeprom} +EOF +fi + +if test "$FUSE_NAME" = "fuse" ; then +cat < fuse} +EOF +fi + +cat < signature} +EOF + +if test "$FUSE_NAME" = "config" ; then +cat < config} +EOF +fi + +cat < 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 <