From a75cf613fd7d0a48d526a996ff5c250c599d3ab7 Mon Sep 17 00:00:00 2001 From: Ed Schouten Date: Thu, 29 Oct 2015 13:49:03 +0000 Subject: Add support for AArch64 CloudABI binaries. ld * Makefile.am (ALL_64_EMULATION_SOURCES): Add support for CloudABI on aarch64. For this target we have to make sure we use ELFOSABI_CLOUDABI instead of ELFOSABI_NONE. * configure.tgt (targ_emul): Likewise. * emulparams/aarch64cloudabi.sh: New file. * emulparams/aarch64cloudabib.sh: New file. * Makefile.in: Regenerate. bfd * config.bfd (targ_defvec): Add support for CloudABI on aarch64. For this target we have to make sure we use ELFOSABI_CLOUDABI instead of ELFOSABI_NONE. * configure.ac (tb): Likewise. * elfnn-aarch64.c: Likewise. * targets.c (_bfd_target_vector): Likewise. * configure: Regenerate. gas * config/tc-aarch64.c (elf64_aarch64_target_format): Select the cloudabi format if the TARGET_OS is cloudabi. --- ld/ChangeLog | 10 ++++++++++ ld/Makefile.am | 10 ++++++++++ ld/Makefile.in | 10 ++++++++++ ld/configure.tgt | 2 ++ ld/emulparams/aarch64cloudabi.sh | 37 +++++++++++++++++++++++++++++++++++++ ld/emulparams/aarch64cloudabib.sh | 2 ++ 6 files changed, 71 insertions(+) create mode 100644 ld/emulparams/aarch64cloudabi.sh create mode 100644 ld/emulparams/aarch64cloudabib.sh (limited to 'ld') diff --git a/ld/ChangeLog b/ld/ChangeLog index da2227c..31ef37d 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,13 @@ +2015-10-29 Ed Schouten + + * Makefile.am (ALL_64_EMULATION_SOURCES): Add support for + CloudABI on aarch64. For this target we have to make sure we use + ELFOSABI_CLOUDABI instead of ELFOSABI_NONE. + * configure.tgt (targ_emul): Likewise. + * emulparams/aarch64cloudabi.sh: New file. + * emulparams/aarch64cloudabib.sh: New file. + * Makefile.in: Regenerate. + 2015-10-29 Nick Clifton PR ld/19146 diff --git a/ld/Makefile.am b/ld/Makefile.am index 3f9546b..0b3b049 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -435,6 +435,8 @@ ALL_64_EMULATION_SOURCES = \ eaarch64elf32.c \ eaarch64elfb.c \ eaarch64elf32b.c \ + eaarch64cloudabi.c \ + eaarch64cloudabib.c \ eaarch64fbsd.c \ eaarch64fbsdb.c \ eaarch64linux.c \ @@ -1618,6 +1620,14 @@ eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aar $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} +eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \ + $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \ + $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + +eaarch64cloudabib.c: $(srcdir)/emulparams/aarch64cloudabib.sh $(srcdir)/emulparams/aarch64cloudabi.sh \ + $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \ + $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + eaarch64fbsd.c: $(srcdir)/emulparams/aarch64fbsd.sh \ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} diff --git a/ld/Makefile.in b/ld/Makefile.in index 9237ff0..f799216 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -764,6 +764,8 @@ ALL_64_EMULATION_SOURCES = \ eaarch64elf32.c \ eaarch64elfb.c \ eaarch64elf32b.c \ + eaarch64cloudabi.c \ + eaarch64cloudabib.c \ eaarch64fbsd.c \ eaarch64fbsdb.c \ eaarch64linux.c \ @@ -3122,6 +3124,14 @@ eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aar $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} +eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \ + $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \ + $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + +eaarch64cloudabib.c: $(srcdir)/emulparams/aarch64cloudabib.sh $(srcdir)/emulparams/aarch64cloudabi.sh \ + $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \ + $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + eaarch64fbsd.c: $(srcdir)/emulparams/aarch64fbsd.sh \ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \ $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} diff --git a/ld/configure.tgt b/ld/configure.tgt index 197f13e..6b6bbf2 100644 --- a/ld/configure.tgt +++ b/ld/configure.tgt @@ -49,6 +49,8 @@ aarch64_be-*-elf) targ_emul=aarch64elfb targ_extra_emuls="aarch64elf aarch64elf32 aarch64elf32b armelfb armelf" ;; aarch64-*-elf) targ_emul=aarch64elf targ_extra_emuls="aarch64elf32 aarch64elf32b aarch64elfb armelf armelfb" ;; +aarch64-*-cloudabi*) targ_emul=aarch64cloudabi + targ_extra_emuls=aarch64cloudabib ;; aarch64-*-freebsd*) targ_emul=aarch64fbsd targ_extra_emuls="aarch64fbsdb aarch64elf" ;; aarch64_be-*-linux*) targ_emul=aarch64linuxb diff --git a/ld/emulparams/aarch64cloudabi.sh b/ld/emulparams/aarch64cloudabi.sh new file mode 100644 index 0000000..88263e5 --- /dev/null +++ b/ld/emulparams/aarch64cloudabi.sh @@ -0,0 +1,37 @@ +ARCH=aarch64 +MACHINE= +NOP=0 + +SCRIPT_NAME=elf +ELFSIZE=64 +OUTPUT_FORMAT="elf64-littleaarch64-cloudabi" +BIG_OUTPUT_FORMAT="elf64-bigaarch64-cloudabi" +LITTLE_OUTPUT_FORMAT="elf64-littleaarch64-cloudabi" +NO_REL_RELOCS=yes + +TEMPLATE_NAME=elf32 +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='__bss_start__ = .;' +OTHER_BSS_END_SYMBOLS='_bss_end__ = . ; __bss_end__ = . ;' +OTHER_END_SYMBOLS='__end__ = . ;' + +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)${IREL_IN_PLT+ *(.iplt)} }" diff --git a/ld/emulparams/aarch64cloudabib.sh b/ld/emulparams/aarch64cloudabib.sh new file mode 100644 index 0000000..909d0f3 --- /dev/null +++ b/ld/emulparams/aarch64cloudabib.sh @@ -0,0 +1,2 @@ +. ${srcdir}/emulparams/aarch64cloudabi.sh +OUTPUT_FORMAT="elf64-bigaarch64-cloudabi" -- cgit v1.1