diff --git a/gas/config/tc-avr.c b/gas/config/tc-avr.c index 7214c07..79837c8 100644 --- a/gas/config/tc-avr.c +++ b/gas/config/tc-avr.c @@ -300,6 +300,10 @@ static struct mcu_type_s mcu_types[] = {"atxmega16e5", AVR_ISA_XMEGA, bfd_mach_avrxmega2}, {"atxmega8e5", AVR_ISA_XMEGA, bfd_mach_avrxmega2}, {"atxmega32x1", AVR_ISA_XMEGA, bfd_mach_avrxmega2}, + {"attiny416", AVR_ISA_XMEGA, bfd_mach_avrxmega3}, + {"attiny417", AVR_ISA_XMEGA, bfd_mach_avrxmega3}, + {"attiny816", AVR_ISA_XMEGA, bfd_mach_avrxmega3}, + {"attiny817", AVR_ISA_XMEGA, bfd_mach_avrxmega3}, {"atxmega64a3", AVR_ISA_XMEGA, bfd_mach_avrxmega4}, {"atxmega64a3u",AVR_ISA_XMEGAU, bfd_mach_avrxmega4}, {"atxmega64a4u",AVR_ISA_XMEGAU, bfd_mach_avrxmega4}, diff --git a/ld/emulparams/avrxmega3.sh b/ld/emulparams/avrxmega3.sh index abaa5b3..504c492 100644 --- a/ld/emulparams/avrxmega3.sh +++ b/ld/emulparams/avrxmega3.sh @@ -1,6 +1,6 @@ ARCH=avr:103 MACHINE= -SCRIPT_NAME=avr +SCRIPT_NAME=avr_rodata OUTPUT_FORMAT="elf32-avr" MAXPAGESIZE=1 EMBEDDED=yes @@ -9,4 +9,5 @@ TEMPLATE_NAME=elf32 TEXT_LENGTH=1024K DATA_ORIGIN=0x802000 DATA_LENGTH=0xffa0 +RODATA_PM_OFFSET=0x8000 EXTRA_EM_FILE=avrelf diff --git a/ld/scripttempl/avr_rodata.sc b/ld/scripttempl/avr_rodata.sc new file mode 100644 index 0000000..eecfedf --- /dev/null +++ b/ld/scripttempl/avr_rodata.sc @@ -0,0 +1,272 @@ +# 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 < 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} + + .eeprom ${RELOCATING-0}: + { + /* See .data above... */ + KEEP(*(.eeprom*)) + ${RELOCATING+ __eeprom_end = . ; } + } ${RELOCATING+ > eeprom} + + .fuse ${RELOCATING-0}: + { + KEEP(*(.fuse)) + KEEP(*(.lfuse)) + KEEP(*(.hfuse)) + KEEP(*(.efuse)) + } ${RELOCATING+ > fuse} + + .lock ${RELOCATING-0}: + { + KEEP(*(.lock*)) + } ${RELOCATING+ > lock} + + .signature ${RELOCATING-0}: + { + KEEP(*(.signature*)) + } ${RELOCATING+ > signature} + + /* 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 <