527278f336
Adding an undefined __c6xabi_DSBT_BASE via an EXTERN in the linker script isn't ideal, as the symbol is not always needed. This patch adds the undefined symbol on encountering relocations where it is implicitly referenced. bfd/ * elf32-tic6x.c (elf32_tic6x_check_relocs): Reference __c6xabi_DSBT_BASE explicitly for R_C6000_SBR_* relocs. ld/ * emulparams/elf32_tic6x_le.sh (EXECUTABLE_SYMBOLS): Don't define.
70 lines
2.2 KiB
Bash
70 lines
2.2 KiB
Bash
SCRIPT_NAME=elf
|
|
TEMPLATE_NAME=elf32
|
|
OUTPUT_FORMAT="elf32-tic6x-le"
|
|
BIG_OUTPUT_FORMAT="elf32-tic6x-be"
|
|
EXTRA_EM_FILE=tic6xdsbt
|
|
GENERATE_SHLIB_SCRIPT=yes
|
|
# This address is an arbitrary value expected to be suitable for
|
|
# semihosting simulator use, but not on hardware where it is expected
|
|
# to be overridden.
|
|
case ${target} in
|
|
*-elf)
|
|
TEXT_START_ADDR=0x8000
|
|
;;
|
|
*-uclinux)
|
|
TEXT_START_ADDR=0x0
|
|
GOT="
|
|
.got ${RELOCATING-0} : {
|
|
*(.dsbt)
|
|
*(.got.plt) *(.igot.plt) *(.got) *(.igot)
|
|
}"
|
|
;;
|
|
esac
|
|
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
|
ARCH=tic6x
|
|
OTHER_GOT_SYMBOLS="PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);"
|
|
# ".bss" is near (small) BSS, ".far" is far (normal) BSS, ".const" is
|
|
# far read-only data, ".rodata" is near read-only data. ".neardata"
|
|
# is near (small) data, ".fardata" is (along with .data) far data.
|
|
RODATA_NAME="const"
|
|
SDATA_NAME="neardata"
|
|
SBSS_NAME="bss"
|
|
BSS_NAME="far"
|
|
OTHER_READONLY_SECTIONS="
|
|
.c6xabi.extab ${RELOCATING-0} : { *(.c6xabi.extab${RELOCATING+* .gnu.linkonce.c6xabiextab.*}) }
|
|
${RELOCATING+ PROVIDE_HIDDEN (__exidx_start = .); }
|
|
.c6xabi.exidx ${RELOCATING-0} : { *(.c6xabi.exidx${RELOCATING+* .gnu.linkonce.c6xabiexidx.*}) }
|
|
${RELOCATING+ PROVIDE_HIDDEN (__exidx_end = .); }"
|
|
OTHER_SDATA_SECTIONS=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.*}) }"
|
|
OTHER_READONLY_RELOC_SECTIONS="
|
|
.rel.rodata ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.*}) }
|
|
.rela.rodata ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.*}) }"
|
|
OTHER_READWRITE_SECTIONS=".fardata ${RELOCATING-0} : { *(.fardata${RELOCATING+ .fardata.*}) }"
|
|
OTHER_READWRITE_RELOC_SECTIONS="
|
|
.rel.fardata ${RELOCATING-0} : { *(.rel.fardata${RELOCATING+ .rel.fardata.*}) }
|
|
.rela.fardata ${RELOCATING-0} : { *(.rela.fardata${RELOCATING+ .rela.fardata.*}) }"
|
|
# For relocating operation, skip OTHER_BSS_SECTIONS, or will cause multiple definition.
|
|
if [ ${RELOCATING-0} ]; then
|
|
OTHER_BSS_SECTIONS="";
|
|
else
|
|
case ${target} in
|
|
|
|
*-elf)
|
|
OTHER_BSS_SECTIONS="
|
|
.heap :
|
|
{
|
|
. = ALIGN(4);
|
|
_HEAP_START = .;
|
|
. += 0x2000000;
|
|
_HEAP_MAX = .;
|
|
}
|
|
.stack :
|
|
{
|
|
. += 0x100000;
|
|
_STACK_START = .;
|
|
}"
|
|
;;
|
|
esac
|
|
fi
|
|
ATTRS_SECTIONS='.c6xabi.attributes 0 : { KEEP (*(.c6xabi.attributes)) KEEP (*(.gnu.attributes)) }'
|