mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-18 21:34:13 +08:00
Update avrxmega3 linker emulation to support avrxmega2 devices with flash memory visible in the SRAM address range.
PR ld/21472 ld * emulparams/avrxmega3.sh (RODATA_PM_OFFSET): Set to 0x8000. * scripttempl/avr.sc (__RODATA_PM_OFFSET__) [RODATA_PM_OFFSET]: Use RODATA_PM_OFFSET as default if not already defined. (.data) [!RODATA_PM_OFFSET]: Don't include .rodata and friends. (.rodata) [RODATA_PM_OFFSET]: Put at an offset of __RODATA_PM_OFFSET__. gas * config/tc-avr.c (mcu_types): Add entries for: attiny416, attiny417, attiny816, attiny817.
This commit is contained in:

committed by
Nick Clifton

parent
6e7e1744e9
commit
f4203b2b88
@ -1,3 +1,9 @@
|
|||||||
|
2017-05-19 Georg-Johann Lay <avr@gjlay.de>
|
||||||
|
|
||||||
|
PR ld/21472
|
||||||
|
* config/tc-avr.c (mcu_types): Add entries for: attiny416,
|
||||||
|
attiny417, attiny816, attiny817.
|
||||||
|
|
||||||
2017-05-18 Alan Modra <amodra@gmail.com>
|
2017-05-18 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* config/tc-aarch64.c: Don't compare booleans against TRUE or FALSE.
|
* config/tc-aarch64.c: Don't compare booleans against TRUE or FALSE.
|
||||||
|
@ -300,6 +300,10 @@ static struct mcu_type_s mcu_types[] =
|
|||||||
{"atxmega16e5", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
|
{"atxmega16e5", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
|
||||||
{"atxmega8e5", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
|
{"atxmega8e5", AVR_ISA_XMEGA, bfd_mach_avrxmega2},
|
||||||
{"atxmega32x1", 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},
|
{"atxmega64a3", AVR_ISA_XMEGA, bfd_mach_avrxmega4},
|
||||||
{"atxmega64a3u",AVR_ISA_XMEGAU, bfd_mach_avrxmega4},
|
{"atxmega64a3u",AVR_ISA_XMEGAU, bfd_mach_avrxmega4},
|
||||||
{"atxmega64a4u",AVR_ISA_XMEGAU, bfd_mach_avrxmega4},
|
{"atxmega64a4u",AVR_ISA_XMEGAU, bfd_mach_avrxmega4},
|
||||||
|
10
ld/ChangeLog
10
ld/ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2017-05-19 Georg-Johann Lay <avr@gjlay.de>
|
||||||
|
|
||||||
|
PR ld/21472
|
||||||
|
* emulparams/avrxmega3.sh (RODATA_PM_OFFSET): Set to 0x8000.
|
||||||
|
* scripttempl/avr.sc (__RODATA_PM_OFFSET__) [RODATA_PM_OFFSET]:
|
||||||
|
Use RODATA_PM_OFFSET as default if not already defined.
|
||||||
|
(.data) [!RODATA_PM_OFFSET]: Don't include .rodata and friends.
|
||||||
|
(.rodata) [RODATA_PM_OFFSET]: Put at an offset of
|
||||||
|
__RODATA_PM_OFFSET__.
|
||||||
|
|
||||||
2017-05-18 Nick Clifton <nickc@redhat.com>
|
2017-05-18 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
PR ld/21251
|
PR ld/21251
|
||||||
|
@ -9,4 +9,5 @@ TEMPLATE_NAME=elf32
|
|||||||
TEXT_LENGTH=1024K
|
TEXT_LENGTH=1024K
|
||||||
DATA_ORIGIN=0x802000
|
DATA_ORIGIN=0x802000
|
||||||
DATA_LENGTH=0xffa0
|
DATA_LENGTH=0xffa0
|
||||||
|
RODATA_PM_OFFSET=0x8000
|
||||||
EXTRA_EM_FILE=avrelf
|
EXTRA_EM_FILE=avrelf
|
||||||
|
@ -4,6 +4,17 @@
|
|||||||
# are permitted in any medium without royalty provided the copyright
|
# are permitted in any medium without royalty provided the copyright
|
||||||
# notice and this notice are preserved.
|
# 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 <<EOF
|
cat <<EOF
|
||||||
/* Copyright (C) 2014-2017 Free Software Foundation, Inc.
|
/* Copyright (C) 2014-2017 Free Software Foundation, Inc.
|
||||||
|
|
||||||
@ -21,7 +32,15 @@ __FUSE_REGION_LENGTH__ = DEFINED(__FUSE_REGION_LENGTH__) ? __FUSE_REGION_LENGTH_
|
|||||||
__LOCK_REGION_LENGTH__ = DEFINED(__LOCK_REGION_LENGTH__) ? __LOCK_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;
|
__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;
|
__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
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
text (rx) : ORIGIN = 0, LENGTH = __TEXT_REGION_LENGTH__
|
text (rx) : ORIGIN = 0, LENGTH = __TEXT_REGION_LENGTH__
|
||||||
@ -187,15 +206,45 @@ SECTIONS
|
|||||||
KEEP (*(.fini0))
|
KEEP (*(.fini0))
|
||||||
${RELOCATING+ _etext = . ; }
|
${RELOCATING+ _etext = . ; }
|
||||||
} ${RELOCATING+ > text}
|
} ${RELOCATING+ > 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 <<EOF
|
||||||
|
.rodata ${RELOCATING+ ADDR(.text) + SIZEOF (.text) + __RODATA_PM_OFFSET__ } ${RELOCATING-0} :
|
||||||
|
{
|
||||||
|
*(.rodata)
|
||||||
|
${RELOCATING+ *(.rodata*)}
|
||||||
|
*(.gnu.linkonce.r*)
|
||||||
|
} ${RELOCATING+AT> text}
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
.data ${RELOCATING-0} :
|
.data ${RELOCATING-0} :
|
||||||
{
|
{
|
||||||
${RELOCATING+ PROVIDE (__data_start = .) ; }
|
${RELOCATING+ PROVIDE (__data_start = .) ; }
|
||||||
*(.data)
|
*(.data)
|
||||||
${RELOCATING+ *(.data*)}
|
${RELOCATING+ *(.data*)}
|
||||||
|
*(.gnu.linkonce.d*)
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Classical devices that don't show flash memory in the SRAM address space
|
||||||
|
# need .rodata to be part of .data because the compiler will use LD*
|
||||||
|
# instructions and LD* cannot access flash.
|
||||||
|
|
||||||
|
if test -z "$RODATA_PM_OFFSET"; then
|
||||||
|
cat <<EOF
|
||||||
*(.rodata) /* We need to include .rodata here if gcc is used */
|
*(.rodata) /* We need to include .rodata here if gcc is used */
|
||||||
${RELOCATING+ *(.rodata*)} /* with -fdata-sections. */
|
${RELOCATING+ *(.rodata*)} /* with -fdata-sections. */
|
||||||
*(.gnu.linkonce.d*)
|
*(.gnu.linkonce.r*)
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
${RELOCATING+. = ALIGN(2);}
|
${RELOCATING+. = ALIGN(2);}
|
||||||
${RELOCATING+ _edata = . ; }
|
${RELOCATING+ _edata = . ; }
|
||||||
${RELOCATING+ PROVIDE (__data_end = .) ; }
|
${RELOCATING+ PROVIDE (__data_end = .) ; }
|
||||||
|
Reference in New Issue
Block a user