diff options
author | Sergey Bugaev <bugaevc@gmail.com> | 2024-01-01 14:53:09 +0300 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2024-01-08 09:51:58 +0000 |
commit | 950b68acd41db8383c98a48607741771a9131127 (patch) | |
tree | abf92999ae0067bfa20f83ece2ab35ad471ae19f /ld/emulparams | |
parent | 09f5e4ed86bfa9a08f35a059fe978cf2211c7b3e (diff) | |
download | binutils-950b68acd41db8383c98a48607741771a9131127.zip binutils-950b68acd41db8383c98a48607741771a9131127.tar.gz binutils-950b68acd41db8383c98a48607741771a9131127.tar.bz2 |
Add support for the aarch64-gnu target (GNU/Hurd on AArch64)
Also recognized are aarch64-*-gnu tagrets, e.g. aarch64-pc-gnu or
aarch64-unknown-gnu.
The ld/emulparams/aarch64gnu.sh file is (for now) identical to aarch64fbsd.sh,
or to aarch64linux.sh with Linux-specific logic removed; and mainly different
from the generic aarch64elf.sh in that it does not set EMBEDDED=yes.
Coupled with a corresponding GCC patch, this produces a toolchain that can
sucessfully build working binaries targeting aarch64-gnu.
Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
Diffstat (limited to 'ld/emulparams')
-rw-r--r-- | ld/emulparams/aarch64gnu.sh | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/ld/emulparams/aarch64gnu.sh b/ld/emulparams/aarch64gnu.sh new file mode 100644 index 0000000..0bcab7a --- /dev/null +++ b/ld/emulparams/aarch64gnu.sh @@ -0,0 +1,37 @@ +ARCH=aarch64 +MACHINE= +NOP=0x1f2003d5 + +SCRIPT_NAME=elf +ELFSIZE=64 +OUTPUT_FORMAT="elf64-littleaarch64" +BIG_OUTPUT_FORMAT="elf64-bigaarch64" +LITTLE_OUTPUT_FORMAT="elf64-littleaarch64" +NO_REL_RELOCS=yes + +TEMPLATE_NAME=elf +EXTRA_EM_FILE=aarch64elf + +GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes + +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" +COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" +SEPARATE_GOTPLT=24 +IREL_IN_PLT= + +TEXT_START_ADDR=0x400000 + +DATA_START_SYMBOLS='PROVIDE (__data_start = .);'; + +# AArch64 does not support .s* sections. +NO_SMALL_DATA=yes + +OTHER_BSS_SYMBOLS="${CREATE_SHLIB+PROVIDE (}__bss_start__ = .${CREATE_SHLIB+)};" +OTHER_BSS_END_SYMBOLS="${CREATE_SHLIB+PROVIDE (}_bss_end__ = .${CREATE_SHLIB+)}; ${CREATE_SHLIB+PROVIDE (}__bss_end__ = .${CREATE_SHLIB+)};" +OTHER_END_SYMBOLS="${CREATE_SHLIB+PROVIDE (}__end__ = .${CREATE_SHLIB+)};" + +OTHER_SECTIONS='.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }' +ATTRS_SECTIONS='.ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }' +# Ensure each PLT entry is aligned to a cache line. +PLT=".plt ${RELOCATING-0} : ALIGN(16) { *(.plt)${RELOCATING+${IREL_IN_PLT+ *(.iplt)}} }" |