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.
This commit is contained in:
Georg-Johann Lay 2017-06-13 16:50:26 +01:00 committed by Nick Clifton
parent dc74becf49
commit 6490dc678b
22 changed files with 181 additions and 283 deletions

View File

@ -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 \

View File

@ -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 \

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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) }

View File

@ -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