X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=ld%2Fscripttempl%2Favr.sc;h=05c0b890f050fe3cb2bc3db04178fef69cfbb02a;hb=77486630b13e9e586b0a1556cba9876a0ede99da;hp=2a0bc6ab04b522b9378d46da45a088d71dfb5d00;hpb=34734a010beee3b56b382dc93249b6cd27c9a373;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/scripttempl/avr.sc b/ld/scripttempl/avr.sc index 2a0bc6ab04..05c0b890f0 100644 --- a/ld/scripttempl/avr.sc +++ b/ld/scripttempl/avr.sc @@ -1,14 +1,53 @@ +# Copyright (C) 2014-2019 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. + +# RODATA_PM_OFFSET +# If empty, .rodata sections will be part of .data. This is for +# devices where it is not possible to use LD* instructions to read +# from flash. +# +# If non-empty, .rodata is not part of .data and the .rodata +# objects are assigned addresses at an offest of RODATA_PM_OFFSET. +# This is for devices that feature reading from flash by means of +# LD* instructions, provided the addresses are offset by +# __RODATA_PM_OFFSET__ (which defaults to RODATA_PM_OFFSET). + cat < text} +EOF + +# Devices like ATtiny816 allow to read from flash memory by means of LD* +# instructions provided we add an offset of __RODATA_PM_OFFSET__ to the +# flash addresses. + +if test -n "$RODATA_PM_OFFSET"; then + cat < text} +EOF +fi - .data ${RELOCATING-0} : ${RELOCATING+AT (ADDR (.text) + SIZEOF (.text))} +cat < data} + } ${RELOCATING+ > data ${RELOCATING+AT> text}} - .bss ${RELOCATING-0} :${RELOCATING+ AT (ADDR (.bss))} + .bss ${RELOCATING+ ADDR(.data) + SIZEOF (.data)} ${RELOCATING-0} :${RELOCATING+ AT (ADDR (.bss))} { ${RELOCATING+ PROVIDE (__bss_start = .) ; } *(.bss) - *(.bss*) - *(COMMON) + ${RELOCATING+ *(.bss*)} + ${RELOCATING+ *(COMMON)} ${RELOCATING+ PROVIDE (__bss_end = .) ; } } ${RELOCATING+ > data} @@ -181,7 +268,7 @@ SECTIONS ${RELOCATING+ __data_load_end = __data_load_start + SIZEOF(.data); } /* Global data not cleared after reset. */ - .noinit ${RELOCATING-0}: + .noinit ${RELOCATING+ ADDR(.bss) + SIZEOF (.bss)} ${RELOCATING-0}: ${RELOCATING+ AT (ADDR (.noinit))} { ${RELOCATING+ PROVIDE (__noinit_start = .) ; } *(.noinit*) @@ -189,12 +276,57 @@ SECTIONS ${RELOCATING+ _end = . ; } ${RELOCATING+ PROVIDE (__heap_start = .) ; } } ${RELOCATING+ > data} +EOF + +if test -n "${EEPROM_LENGTH}"; then +cat < eeprom} +EOF +fi + +if test "$FUSE_NAME" = "fuse" ; then +cat < fuse} +EOF +fi + +cat < lock} + + .signature ${RELOCATING-0}: + { + KEEP(*(.signature*)) + } ${RELOCATING+ > signature} +EOF + +if test "$FUSE_NAME" = "config" ; then +cat < config} +EOF +fi + +cat <