Add support for AArch64 CloudABI binaries.
authorEd Schouten <ed@nuxi.nl>
Thu, 29 Oct 2015 13:49:03 +0000 (13:49 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 29 Oct 2015 13:49:03 +0000 (13:49 +0000)
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.

14 files changed:
bfd/ChangeLog
bfd/config.bfd
bfd/configure
bfd/configure.ac
bfd/elfnn-aarch64.c
bfd/targets.c
gas/ChangeLog
gas/config/tc-aarch64.c
ld/ChangeLog
ld/Makefile.am
ld/Makefile.in
ld/configure.tgt
ld/emulparams/aarch64cloudabi.sh [new file with mode: 0644]
ld/emulparams/aarch64cloudabib.sh [new file with mode: 0644]

index cedceadecb7861a642c6529258f1b3dc1dcb37ef..41cfcbe2342eecbc54daadeb6ee1ca3dc44c5524 100644 (file)
@@ -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.
index fe43153a7cf33a26e8bc8ffee4b5b3ea1bb148a7..c5688cb0671dd14be1b80f152047e8484d0ceccc 100644 (file)
@@ -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"
index 0308aa5bdad74e23712102df7c897714d0696d03..58388fe3085d2f9bd3258a408b323e19c396ea91 100755 (executable)
@@ -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 ;;
index cc446e1bb8f199ca327f21a80b5647cffcf97489..6f5e85f3a6fef98005f0d96c53a7858d32888f3a 100644 (file)
@@ -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 ;;
index f3489d538141b9295985922f5ae0f3cb388b70c8..5558bf70a4d5367fd7fb02a9829da2cd0e00f178 100644 (file)
@@ -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"
index 19469bc448cbc2b6581c79c9bd3dcf8f8b377719..51f2198c13094c9ad5dd13096ce2bcbcee6ecdaa 100644 (file)
@@ -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
index 1df8a1d1f4d9ed3834f312e117d3b13e3088113f..af1540cf3ecf6f6b9b2baa138520884dd9f1f84c 100644 (file)
@@ -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
index 81b8e2db7e4b8a43cf29b09cace7bc7d44a95074..2cc7b4bd26284726259f66e9df8f18f1a4c4efc5 100644 (file)
@@ -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
index da2227c5c79601ad952d0307d76dddf2f433780d..31ef37da1afeb2e2788da9f39088e2090728733c 100644 (file)
@@ -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
index 3f9546b9aa0dfde6ace631742d0e124a7e3cd10c..0b3b04927c11f77142de10a82582ad7a113864c1 100644 (file)
@@ -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}
index 9237ff034e70a6dd4809a0d6da00b785962502b6..f7992161fcd02daea458731093780f121e89a214 100644 (file)
@@ -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}
index 197f13e4ba56228bf16fce79fcb1be353e73dccb..6b6bbf25771e9d5d4e748c623de0701dd0bbeb63 100644 (file)
@@ -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 (file)
index 0000000..88263e5
--- /dev/null
@@ -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 (file)
index 0000000..909d0f3
--- /dev/null
@@ -0,0 +1,2 @@
+. ${srcdir}/emulparams/aarch64cloudabi.sh
+OUTPUT_FORMAT="elf64-bigaarch64-cloudabi"