SCRIPT_NAME=elf
-TEMPLATE_NAME=elf32
+TEMPLATE_NAME=elf
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.
-TEXT_START_ADDR=0x8000
+case ${target} in
+ *-elf)
+ TEXT_START_ADDR=0x8000
+ ;;
+ *-uclinux)
+ TEXT_START_ADDR=0x0
+ GOT="
+.got ${RELOCATING-0} : {
+ ${RELOCATING+*(.dsbt)
+ *(.got.plt) *(.igot.plt) }*(.got)${RELOCATING+ *(.igot)}
+}"
+ ;;
+esac
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ARCH=tic6x
-EXECUTABLE_SYMBOLS="EXTERN (__c6xabi_DSBT_BASE);"
-SDATA_START_SYMBOLS="PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);"
+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.
SDATA_NAME="neardata"
SBSS_NAME="bss"
BSS_NAME="far"
+OTHER_READONLY_SECTIONS="
+ .c6xabi.extab ${RELOCATING-0} : { *(.c6xabi.extab${RELOCATING+* .gnu.linkonce.c6xabiextab.*}) }
+ .c6xabi.exidx ${RELOCATING-0} :
+ {
+ ${RELOCATING+PROVIDE_HIDDEN (__exidx_start = .);}
+ *(.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.*}) }
OTHER_READWRITE_RELOC_SECTIONS="
.rel.fardata ${RELOCATING-0} : { *(.rel.fardata${RELOCATING+ .rel.fardata.*}) }
.rela.fardata ${RELOCATING-0} : { *(.rela.fardata${RELOCATING+ .rela.fardata.*}) }"
-OTHER_BSS_SECTIONS="
- .heap :
- {
- . = ALIGN(4);
- _HEAP_START = .;
- . += 0x2000000;
- _HEAP_MAX = .;
+# 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)) }'