aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFathi Boudra <fathi.boudra@linaro.org>2017-11-23 09:11:21 +0000
committerLinaro Code Review <review@review.linaro.org>2017-11-23 09:11:21 +0000
commit2b3aad5c0de7eb70e0c0650d61652ee7c8cb82d2 (patch)
tree042396f7b46f1ddbfe324d9ca6066f5d1cfdabdf
parent620a953cee0812d1822633e83a040799080de8c6 (diff)
parent40d5381ca653ee479371b0b7bdbd8f9be0b8ed1f (diff)
Merge "binutils: backport patches for correct gnu_ilp32 triplet"
-rw-r--r--meta-linaro-toolchain/recipes-devtools/binutils/binutils-linaro-2.25.inc2
-rw-r--r--meta-linaro-toolchain/recipes-devtools/binutils/binutils-linaro-2.25/0001-AArch64-gas-Support-ILP32-triplet-aarch64-linux-gnu_.patch176
-rw-r--r--meta-linaro-toolchain/recipes-devtools/binutils/binutils-linaro-2.25/0002-AArch64-ld-Support-ILP32-triplet-aarch64-linux-gnu_i.patch54
3 files changed, 232 insertions, 0 deletions
diff --git a/meta-linaro-toolchain/recipes-devtools/binutils/binutils-linaro-2.25.inc b/meta-linaro-toolchain/recipes-devtools/binutils/binutils-linaro-2.25.inc
index 12144d53..8299d3c4 100644
--- a/meta-linaro-toolchain/recipes-devtools/binutils/binutils-linaro-2.25.inc
+++ b/meta-linaro-toolchain/recipes-devtools/binutils/binutils-linaro-2.25.inc
@@ -34,6 +34,8 @@ SRC_URI = "\
file://0001-Fix-MMIX-build-breakage-from-bfd_set_section_vma-cha.patch;apply=no \
file://0001-AArch64-Define-LP64-BE-linker-name.patch \
file://0001-Fix-an-internal-error-in-do_print_to_mapfile-seen-wi.patch \
+ file://0001-AArch64-gas-Support-ILP32-triplet-aarch64-linux-gnu_.patch \
+ file://0002-AArch64-ld-Support-ILP32-triplet-aarch64-linux-gnu_i.patch \
"
S = "${WORKDIR}/git"
diff --git a/meta-linaro-toolchain/recipes-devtools/binutils/binutils-linaro-2.25/0001-AArch64-gas-Support-ILP32-triplet-aarch64-linux-gnu_.patch b/meta-linaro-toolchain/recipes-devtools/binutils/binutils-linaro-2.25/0001-AArch64-gas-Support-ILP32-triplet-aarch64-linux-gnu_.patch
new file mode 100644
index 00000000..6c144077
--- /dev/null
+++ b/meta-linaro-toolchain/recipes-devtools/binutils/binutils-linaro-2.25/0001-AArch64-gas-Support-ILP32-triplet-aarch64-linux-gnu_.patch
@@ -0,0 +1,176 @@
+From 08ca7f251e6ee66270b25e5aa3acc4a837d931a6 Mon Sep 17 00:00:00 2001
+From: Jiong Wang <jiong.wang@arm.com>
+Date: Mon, 22 May 2017 09:50:19 +0100
+Subject: [PATCH 1/2] [AArch64, gas] Support ILP32 triplet
+ aarch64*-linux-gnu_ilp32
+
+This patch allows AArch64 GAS defaulting to ILP32 if it is configured with
+aarch64*-linux-gnu_ilp32.
+
+"md_after_parse_args" is implemented to update ABI into ILP32 if DEFAULT_ARCH is
+"aarch64:32".
+
+gas/
+ * configure.tgt: Set "arch" to "aarch64" if ${cpu} equals "aarch64".
+ Recognize the new triplet name aarch64*-linux-gnu_ilp32.
+ * configure.ac: Output DEFAULT_ARCH macro for AArch64.
+ * configure: Regenerate.
+ * config/tc-aarch64.h (aarch64_after_parse_args): New declaration.
+ (md_after_parse_args): New define.
+ * config/tc-aarch64.c (aarch64_abi_type): New enumeration
+ AARCH64_ABI_NONE.
+ (DEFAULT_ARCH): New define.
+ (aarch64_abi): Set default value to AARCH64_ABI_NONE.
+ (aarch64_after_parse_args): New function.
+---
+ gas/ChangeLog | 14 ++++++++++++++
+ gas/config/tc-aarch64.c | 30 +++++++++++++++++++++++++++---
+ gas/config/tc-aarch64.h | 3 +++
+ gas/configure | 2 +-
+ gas/configure.ac | 2 +-
+ gas/configure.tgt | 9 ++++++---
+ 6 files changed, 52 insertions(+), 8 deletions(-)
+
+diff --git a/gas/ChangeLog b/gas/ChangeLog
+index 7ebbd8b..e5c4b38 100644
+--- a/gas/ChangeLog
++++ b/gas/ChangeLog
+@@ -1,3 +1,17 @@
++2017-05-22 Jiong Wang <jiong.wang@arm.com>
++
++ * configure.tgt: Set "arch" to "aarch64" if ${cpu} equals "aarch64".
++ Recognize the new triplet name aarch64*-linux-gnu_ilp32.
++ * configure.ac: Output DEFAULT_ARCH macro for AArch64.
++ * configure: Regenerate.
++ * config/tc-aarch64.h (aarch64_after_parse_args): New declaration.
++ (md_after_parse_args): New define.
++ * config/tc-aarch64.c (aarch64_abi_type): New enumeration
++ AARCH64_ABI_NONE.
++ (DEFAULT_ARCH): New define.
++ (aarch64_abi): Set default value to AARCH64_ABI_NONE.
++ (aarch64_after_parse_args): New function.
++
+ 2016-06-29 Maciej W. Rozycki <macro@imgtec.com>
+
+ Backport from master
+diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
+index 4c785a6..da347cc 100644
+--- a/gas/config/tc-aarch64.c
++++ b/gas/config/tc-aarch64.c
+@@ -65,12 +65,20 @@ static symbolS *GOT_symbol;
+ /* Which ABI to use. */
+ enum aarch64_abi_type
+ {
+- AARCH64_ABI_LP64 = 0,
+- AARCH64_ABI_ILP32 = 1
++ AARCH64_ABI_NONE = 0,
++ AARCH64_ABI_LP64 = 1,
++ AARCH64_ABI_ILP32 = 2
+ };
+
++#ifndef DEFAULT_ARCH
++#define DEFAULT_ARCH "aarch64"
++#endif
++
++/* DEFAULT_ARCH is initialized in gas/configure.tgt. */
++static const char *default_arch = DEFAULT_ARCH;
++
+ /* AArch64 ABI for the output file. */
+-static enum aarch64_abi_type aarch64_abi = AARCH64_ABI_LP64;
++static enum aarch64_abi_type aarch64_abi = AARCH64_ABI_NONE;
+
+ /* When non-zero, program to a 32-bit model, in which the C data types
+ int, long and all pointer types are 32-bit objects (ILP32); or to a
+@@ -6894,6 +6902,22 @@ aarch64_force_relocation (struct fix *fixp)
+
+ #ifdef OBJ_ELF
+
++/* Implement md_after_parse_args. This is the earliest time we need to decide
++ ABI. If no -mabi specified, the ABI will be decided by target triplet. */
++
++void
++aarch64_after_parse_args (void)
++{
++ if (aarch64_abi != AARCH64_ABI_NONE)
++ return;
++
++ /* DEFAULT_ARCH will have ":32" extension if it's configured for ILP32. */
++ if (strlen (default_arch) > 7 && strcmp (default_arch + 7, ":32") == 0)
++ aarch64_abi = AARCH64_ABI_ILP32;
++ else
++ aarch64_abi = AARCH64_ABI_LP64;
++}
++
+ const char *
+ elf64_aarch64_target_format (void)
+ {
+diff --git a/gas/config/tc-aarch64.h b/gas/config/tc-aarch64.h
+index 1fad6ce..47b3b1f 100644
+--- a/gas/config/tc-aarch64.h
++++ b/gas/config/tc-aarch64.h
+@@ -191,6 +191,9 @@ struct aarch64_segment_info_type
+ #define tc_regname_to_dw2regnum tc_aarch64_regname_to_dw2regnum
+ #define tc_cfi_frame_initial_instructions tc_aarch64_frame_initial_instructions
+
++extern void aarch64_after_parse_args (void);
++#define md_after_parse_args() aarch64_after_parse_args ()
++
+ #else /* Not OBJ_ELF. */
+ #define GLOBAL_OFFSET_TABLE_NAME "__GLOBAL_OFFSET_TABLE_"
+ #endif
+diff --git a/gas/configure b/gas/configure
+index b11b6c0..74bc60d 100755
+--- a/gas/configure
++++ b/gas/configure
+@@ -12400,7 +12400,7 @@ $as_echo "#define NDS32_DEFAULT_AUDIO_EXT 1" >>confdefs.h
+ $as_echo "$enable_audio_ext" >&6; }
+ ;;
+
+- i386 | s390 | sparc)
++ aarch64 | i386 | s390 | sparc)
+ if test $this_target = $target ; then
+
+ cat >>confdefs.h <<_ACEOF
+diff --git a/gas/configure.ac b/gas/configure.ac
+index 371f7b3..f83edb7 100644
+--- a/gas/configure.ac
++++ b/gas/configure.ac
+@@ -453,7 +453,7 @@ changequote([,])dnl
+ AC_MSG_RESULT($enable_audio_ext)
+ ;;
+
+- i386 | s390 | sparc)
++ aarch64 | i386 | s390 | sparc)
+ if test $this_target = $target ; then
+ AC_DEFINE_UNQUOTED(DEFAULT_ARCH, "${arch}", [Default architecture.])
+ fi
+diff --git a/gas/configure.tgt b/gas/configure.tgt
+index 9abc768..5104c97 100644
+--- a/gas/configure.tgt
++++ b/gas/configure.tgt
+@@ -46,8 +46,8 @@ eval `echo $targ | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/cpu=\1 vendor=\2 os=\3/'`
+ # endian and arch.
+ # Note: This table is alpha-sorted, please try to keep it that way.
+ case ${cpu} in
+- aarch64) cpu_type=aarch64 endian=little ;;
+- aarch64_be) cpu_type=aarch64 endian=big ;;
++ aarch64) cpu_type=aarch64 endian=little arch=aarch64;;
++ aarch64_be) cpu_type=aarch64 endian=big arch=aarch64;;
+ alpha*) cpu_type=alpha ;;
+ am33_2.0) cpu_type=mn10300 endian=little ;;
+ arm*be|arm*b) cpu_type=arm endian=big ;;
+@@ -119,7 +119,10 @@ generic_target=${cpu_type}-$vendor-$os
+ # Note: This table is alpha-sorted, please try to keep it that way.
+ case ${generic_target} in
+ aarch64*-*-elf) fmt=elf;;
+- aarch64*-*-linux*) fmt=elf em=linux ;;
++ aarch64*-*-linux*) fmt=elf em=linux
++ case ${cpu}-${os} in
++ aarch64*-linux-gnu_ilp32) arch=aarch64:32 ;;
++ esac ;;
+
+ alpha-*-*vms*) fmt=evax ;;
+ alpha-*-osf*) fmt=ecoff ;;
+--
+2.7.4
+
diff --git a/meta-linaro-toolchain/recipes-devtools/binutils/binutils-linaro-2.25/0002-AArch64-ld-Support-ILP32-triplet-aarch64-linux-gnu_i.patch b/meta-linaro-toolchain/recipes-devtools/binutils/binutils-linaro-2.25/0002-AArch64-ld-Support-ILP32-triplet-aarch64-linux-gnu_i.patch
new file mode 100644
index 00000000..1e0ba357
--- /dev/null
+++ b/meta-linaro-toolchain/recipes-devtools/binutils/binutils-linaro-2.25/0002-AArch64-ld-Support-ILP32-triplet-aarch64-linux-gnu_i.patch
@@ -0,0 +1,54 @@
+From 1fa9dd372fe74048134dd3af5e7ae305b0a7e846 Mon Sep 17 00:00:00 2001
+From: Jiong Wang <jiong.wang@arm.com>
+Date: Mon, 22 May 2017 09:50:29 +0100
+Subject: [PATCH 2/2] [AArch64, ld] Support ILP32 triplet
+ aarch64*-linux-gnu_ilp32
+
+This patch allows AArch64 LD defaulting to ILP32 if it is configured with
+aarch64*-linux-gnu_ilp32.
+
+ld/
+ * configure.tgt: Set "targ_emul" to "aarch64linux32b" for
+ aarch64_be-*-linux-gnu_ilp32. Set "targ_emul" to "aarch64linux32" for
+ aarch64-*-linux-gnu_ilp32.
+---
+ ld/ChangeLog | 6 ++++++
+ ld/configure.tgt | 8 ++++++++
+ 2 files changed, 14 insertions(+)
+
+diff --git a/ld/ChangeLog b/ld/ChangeLog
+index ce1699b..62464b6 100644
+--- a/ld/ChangeLog
++++ b/ld/ChangeLog
+@@ -1,3 +1,9 @@
++2017-05-22 Jiong Wang <jiong.wang@arm.com>
++
++ * configure.tgt: Set "targ_emul" to "aarch64linux32b" for
++ aarch64_be-*-linux-gnu_ilp32. Set "targ_emul" to "aarch64linux32" for
++ aarch64-*-linux-gnu_ilp32.
++
+ 2015-07-21 Tristan Gingold <gingold@adacore.com>
+
+ * configure: Regenerate.
+diff --git a/ld/configure.tgt b/ld/configure.tgt
+index 24e36d1..b827bbc 100644
+--- a/ld/configure.tgt
++++ b/ld/configure.tgt
+@@ -49,6 +49,14 @@ 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_be-*-linux-gnu_ilp32)
++ targ_emul=aarch64linux32b
++ targ_extra_libpath="aarch64linuxb aarch64linux aarch64linux32 armelfb_linux_eabi armelf_linux_eabi"
++ targ_extra_emuls="aarch64elfb aarch64elf aarch64elf32 aarch64elf32b armelfb armelf $targ_extra_libpath" ;;
++aarch64-*-linux-gnu_ilp32)
++ targ_emul=aarch64linux32
++ targ_extra_libpath="aarch64linux aarch64linuxb aarch64linux32b armelfb_linux_eabi armelf_linux_eabi"
++ targ_extra_emuls="aarch64elf aarch64elf32 aarch64elf32b aarch64elfb armelf armelfb $targ_extra_libpath" ;;
+ aarch64_be-*-linux*) targ_emul=aarch64linuxb
+ targ_extra_libpath="aarch64linux aarch64linux32 aarch64linux32b armelfb_linux_eabi armelf_linux_eabi"
+ targ_extra_emuls="aarch64elfb aarch64elf aarch64elf32 aarch64elf32b armelfb armelf $targ_extra_libpath" ;;
+--
+2.7.4
+