diff options
-rw-r--r-- | bfd/ChangeLog | 10 | ||||
-rw-r--r-- | bfd/config.bfd | 5 | ||||
-rwxr-xr-x | bfd/configure | 2 | ||||
-rw-r--r-- | bfd/configure.ac | 6 | ||||
-rw-r--r-- | bfd/elfnn-aarch64.c | 19 | ||||
-rw-r--r-- | bfd/targets.c | 4 | ||||
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/tc-aarch64.c | 5 | ||||
-rw-r--r-- | ld/ChangeLog | 10 | ||||
-rw-r--r-- | ld/Makefile.am | 10 | ||||
-rw-r--r-- | ld/Makefile.in | 10 | ||||
-rw-r--r-- | ld/configure.tgt | 2 | ||||
-rw-r--r-- | ld/emulparams/aarch64cloudabi.sh | 37 | ||||
-rw-r--r-- | ld/emulparams/aarch64cloudabib.sh | 2 |
14 files changed, 125 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index cedcead..41cfcbe 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,13 @@ +2015-10-29 Ed Schouten <ed@nuxi.nl> + + * 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. + 2015-10-29 Pedro Alves <palves@redhat.com> * libhppa.h (bfd_hppa_insn2fmt): Add cast. diff --git a/bfd/config.bfd b/bfd/config.bfd index fe43153..c5688cb 100644 --- a/bfd/config.bfd +++ b/bfd/config.bfd @@ -184,6 +184,11 @@ case "${targ}" in targ_selvecs="aarch64_elf64_be_vec arm_elf32_le_vec arm_elf32_be_vec" want64=true ;; + aarch64-*-cloudabi*) + targ_defvec=aarch64_elf64_le_cloudabi_vec + targ_selvecs=aarch64_elf64_be_cloudabi_vec + want64=true + ;; aarch64-*-linux*) targ_defvec=aarch64_elf64_le_vec targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec" diff --git a/bfd/configure b/bfd/configure index 0308aa5..58388fe 100755 --- a/bfd/configure +++ b/bfd/configure @@ -15250,7 +15250,9 @@ do aarch64_elf32_be_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;; aarch64_elf32_le_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;; aarch64_elf64_be_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + aarch64_elf64_be_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + aarch64_elf64_le_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; alpha_ecoff_le_vec) tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;; alpha_elf64_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;; alpha_elf64_fbsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;; diff --git a/bfd/configure.ac b/bfd/configure.ac index cc446e1..6f5e85f 100644 --- a/bfd/configure.ac +++ b/bfd/configure.ac @@ -695,8 +695,10 @@ do # use one entry per line, even though this leads to long lines. aarch64_elf32_be_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;; aarch64_elf32_le_vec) tb="$tb elf32-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf32.lo $elf"; target_size=64 ;; - aarch64_elf64_be_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; - aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + aarch64_elf64_be_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + aarch64_elf64_be_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + aarch64_elf64_le_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; alpha_ecoff_le_vec) tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;; alpha_elf64_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;; alpha_elf64_fbsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;; diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index f3489d5..5558bf7 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -9385,3 +9385,22 @@ const struct elf_size_info elfNN_aarch64_size_info = #define elf_backend_obj_attrs_section ".ARM.attributes" #include "elfNN-target.h" + +/* CloudABI support. */ + +#undef TARGET_LITTLE_SYM +#define TARGET_LITTLE_SYM aarch64_elfNN_le_cloudabi_vec +#undef TARGET_LITTLE_NAME +#define TARGET_LITTLE_NAME "elfNN-littleaarch64-cloudabi" +#undef TARGET_BIG_SYM +#define TARGET_BIG_SYM aarch64_elfNN_be_cloudabi_vec +#undef TARGET_BIG_NAME +#define TARGET_BIG_NAME "elfNN-bigaarch64-cloudabi" + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_CLOUDABI + +#undef elfNN_bed +#define elfNN_bed elfNN_aarch64_cloudabi_bed + +#include "elfNN-target.h" diff --git a/bfd/targets.c b/bfd/targets.c index 19469bc..51f2198 100644 --- a/bfd/targets.c +++ b/bfd/targets.c @@ -568,7 +568,9 @@ to find an alternative output format that is suitable. extern const bfd_target aarch64_elf32_be_vec; extern const bfd_target aarch64_elf32_le_vec; extern const bfd_target aarch64_elf64_be_vec; +extern const bfd_target aarch64_elf64_be_cloudabi_vec; extern const bfd_target aarch64_elf64_le_vec; +extern const bfd_target aarch64_elf64_le_cloudabi_vec; extern const bfd_target alpha_ecoff_le_vec; extern const bfd_target alpha_elf64_vec; extern const bfd_target alpha_elf64_fbsd_vec; @@ -948,7 +950,9 @@ static const bfd_target * const _bfd_target_vector[] = &aarch64_elf32_be_vec, &aarch64_elf32_le_vec, &aarch64_elf64_be_vec, + &aarch64_elf64_be_cloudabi_vec, &aarch64_elf64_le_vec, + &aarch64_elf64_le_cloudabi_vec, #endif #ifdef BFD64 diff --git a/gas/ChangeLog b/gas/ChangeLog index 1df8a1d..af1540c 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2015-10-29 Nick Clifton <nickc@redhat.com> + + * config/tc-aarch64.c (elf64_aarch64_target_format): Select the + cloudabi format if the TARGET_OS is cloudabi. + 2015-10-29 Thomas Preud'homme <thomas.preudhomme@arm.com> * config/tc-arm.c (insns): Guard cps by arm_ext_v6_notm instead of diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c index 81b8e2d..2cc7b4b 100644 --- a/gas/config/tc-aarch64.c +++ b/gas/config/tc-aarch64.c @@ -7309,6 +7309,11 @@ aarch64_force_relocation (struct fix *fixp) const char * elf64_aarch64_target_format (void) { + if (strcmp (TARGET_OS, "cloudabi") == 0) + { + /* FIXME: What to do for ilp32_p ? */ + return target_big_endian ? "elf64-bigaarch64-cloudabi" : "elf64-littleaarch64-cloudabi"; + } if (target_big_endian) return ilp32_p ? "elf32-bigaarch64" : "elf64-bigaarch64"; else 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 <ed@nuxi.nl> + + * 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 <nickc@redhat.com> 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" |