2016-11-02 00:45:57 +08:00
|
|
|
# This is an ELF platform.
|
|
|
|
SCRIPT_NAME=elf
|
|
|
|
ARCH=riscv
|
|
|
|
NO_REL_RELOCS=yes
|
|
|
|
|
2019-09-10 10:57:29 +08:00
|
|
|
TEMPLATE_NAME=elf
|
2016-11-02 00:45:57 +08:00
|
|
|
EXTRA_EM_FILE=riscvelf
|
|
|
|
|
|
|
|
ELFSIZE=32
|
|
|
|
|
|
|
|
if test `echo "$host" | sed -e s/64//` = `echo "$target" | sed -e s/64//`; then
|
|
|
|
case " $EMULATION_LIBPATH " in
|
|
|
|
*" ${EMULATION_NAME} "*)
|
|
|
|
NATIVE=yes
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
|
2018-01-06 06:29:49 +08:00
|
|
|
# Enable shared library support for everything except an embedded elf target.
|
|
|
|
case "$target" in
|
|
|
|
riscv*-elf)
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
GENERATE_SHLIB_SCRIPT=yes
|
|
|
|
GENERATE_PIE_SCRIPT=yes
|
|
|
|
;;
|
|
|
|
esac
|
2016-11-02 00:45:57 +08:00
|
|
|
|
|
|
|
TEXT_START_ADDR=0x10000
|
|
|
|
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
|
|
|
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
|
|
|
|
2018-10-16 07:00:28 +08:00
|
|
|
DATA_START_SYMBOLS="${CREATE_SHLIB-__DATA_BEGIN__ = .;}"
|
|
|
|
|
|
|
|
SDATA_START_SYMBOLS="${CREATE_SHLIB-__SDATA_BEGIN__ = .;}
|
2016-11-02 00:45:57 +08:00
|
|
|
*(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*)"
|
|
|
|
|
|
|
|
INITIAL_READONLY_SECTIONS=".interp : { *(.interp) } ${CREATE_PIE-${INITIAL_READONLY_SECTIONS}}"
|
|
|
|
INITIAL_READONLY_SECTIONS="${RELOCATING+${CREATE_SHLIB-${INITIAL_READONLY_SECTIONS}}}"
|
2018-10-16 07:00:28 +08:00
|
|
|
|
|
|
|
# We must cover as much of sdata as possible if it exists. If sdata+bss is
|
|
|
|
# smaller than 0x1000 then we should start from bss end to cover as much of
|
|
|
|
# the program as possible. But we can't allow gp to cover any of rodata, as
|
|
|
|
# the address of variables in rodata may change during relaxation, so we start
|
|
|
|
# from data in that case.
|
|
|
|
OTHER_END_SYMBOLS="${CREATE_SHLIB-__BSS_END__ = .;
|
|
|
|
__global_pointer$ = MIN(__SDATA_BEGIN__ + 0x800,
|
|
|
|
MAX(__DATA_BEGIN__ + 0x800, __BSS_END__ - 0x800));}"
|