[binutils-gdb] Add support for AArch64 CloudABI binaries.

Nick Clifton nickc@sourceware.org
Thu Oct 29 13:50:00 GMT 2015


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a75cf613fd7d0a48d526a996ff5c250c599d3ab7

commit a75cf613fd7d0a48d526a996ff5c250c599d3ab7
Author: Ed Schouten <ed@nuxi.nl>
Date:   Thu Oct 29 13:49:03 2015 +0000

    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.

Diff:
---
 bfd/ChangeLog                     | 10 ++++++++++
 bfd/config.bfd                    |  5 +++++
 bfd/configure                     |  2 ++
 bfd/configure.ac                  |  6 ++++--
 bfd/elfnn-aarch64.c               | 19 +++++++++++++++++++
 bfd/targets.c                     |  4 ++++
 gas/ChangeLog                     |  5 +++++
 gas/config/tc-aarch64.c           |  5 +++++
 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 ++
 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"



More information about the Binutils-cvs mailing list