This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH] BFD/gas support for arm-nacl target
- From: Roland McGrath <mcgrathr at google dot com>
- To: binutils at sourceware dot org
- Cc: David Sehr <sehr at google dot com>
- Date: Fri, 02 Mar 2012 11:08:26 -0800
- Subject: [PATCH] BFD/gas support for arm-nacl target
- Authentication-results: mr.google.com; spf=pass (google.com: domain of mcgrathr@google.com designates 10.68.216.132 as permitted sender) smtp.mail=mcgrathr@google.com; dkim=pass header.i=mcgrathr@google.com
This patch enables arm*-*-nacl* targets in BFD and gas.
The BFD target has only the most basic settings for this variant,
i.e. enough for the assembler alone.
Much more will be needed in bfd/ for the linking-related changes, which I
will submit later on. But this is a start, and I'd like to get it in now
since it's enough for the assembler target.
Ok for trunk?
Thanks,
Roland
bfd/
2012-03-02 Roland McGrath <mcgrathr@google.com>
* elf32-arm.c (bfd_elf32_littlearm_nacl_vec, bfd_elf32_bigarm_nacl_vec):
New backend vector stanza.
* config.bfd: Handle arm-*-nacl*, armeb-*-nacl*.
* targets.c: Support bfd_elf32_{big,little}_nacl_vec.
* configure.in: Likewise.
* configure: Regenerated.
gas/
2012-03-02 Roland McGrath <mcgrathr@google.com>
* configure.tgt (arm-*-nacl*): Match it.
* config/te-nacl.h (FPU_DEFAULT, EABI_DEFAULT): Define.
(LOCAL_LABELS_DOLLAR): Define.
* config/tc-arm.c (elf32_arm_target_format) [TE_NACL]:
Use nacl format variants.
gas/testsuite/
2012-03-02 Roland McGrath <mcgrathr@google.com>
* gas/arm/arch4t-eabi.d: Match *-*-nacl* targets too.
* gas/arm/arch4t.d: Likewise.
* gas/arm/got_prel.d: Likewise.
* gas/arm/got_prel.d: Likewise.
* gas/arm/mapdir.d: Likewise.
* gas/arm/mapmisc.d: Likewise.
* gas/arm/mapsecs.d: Likewise.
* gas/arm/mapshort-eabi.d: Likewise.
* gas/arm/mapshort-elf.d: Likewise.
* gas/arm/thumb-eabi.d: Likewise.
* gas/arm/thumb.d: Likewise.
* gas/arm/thumbrel.d: Likewise.
diff --git a/bfd/config.bfd b/bfd/config.bfd
index 2cf89ed..1ede6d8 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -216,6 +216,16 @@ case "${targ}" in
targ_selvecs=bfd_elf32_bigarc_vec
;;
+ arm-*-nacl*)
+ targ_defvec=bfd_elf32_littlearm_nacl_vec
+ targ_selvecs="bfd_elf32_i386_vec bfd_elf32_bigarm_nacl_vec bfd_elf32_littlearm_nacl_vec"
+ targ_archs="$targ_archs bfd_arm_arch bfd_i386_arch"
+ ;;
+ armeb-*-nacl*)
+ targ_defvec=bfd_elf32_bigarm_nacl_vec
+ targ_selvecs="bfd_elf32_i386_vec bfd_elf32_bigarm_nacl_vec bfd_elf32_littlearm_nacl_vec"
+ targ_archs="$targ_archs bfd_arm_arch bfd_i386_arch"
+ ;;
armeb-*-netbsdelf*)
targ_defvec=bfd_elf32_bigarm_vec
targ_selvecs="bfd_elf32_littlearm_vec armnetbsd_vec"
@@ -573,7 +583,8 @@ case "${targ}" in
;;
i[3-7]86-*-nacl*)
targ_defvec=bfd_elf32_i386_nacl_vec
- targ_selvecs="bfd_elf32_i386_vec"
+ targ_selvecs="bfd_elf32_i386_vec bfd_elf32_bigarm_nacl_vec bfd_elf32_littlearm_nacl_vec"
+ targ_archs="$targ_archs bfd_arm_arch bfd_i386_arch"
;;
#ifdef BFD64
x86_64-*-darwin*)
diff --git a/bfd/configure b/bfd/configure
index dc2a63c..6ced7e4 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -15185,6 +15185,7 @@ do
bfd_elf32_big_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;;
bfd_elf32_bigarc_vec) tb="$tb elf32-arc.lo elf32.lo $elf" ;;
bfd_elf32_bigarm_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
+ bfd_elf32_bigarm_nacl_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
bfd_elf32_bigarm_symbian_vec)
tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
bfd_elf32_bigarm_vxworks_vec)
@@ -15230,6 +15231,7 @@ do
bfd_elf32_littlearm_vxworks_vec)
tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
bfd_elf32_littlearm_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
+ bfd_elf32_littlearm_nacl_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
bfd_elf32_littlemips_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
bfd_elf32_littlemips_vxworks_vec)
tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
diff --git a/bfd/configure.in b/bfd/configure.in
index d6f3fe3..0ebef49 100644
--- a/bfd/configure.in
+++ b/bfd/configure.in
@@ -684,6 +684,7 @@ do
bfd_elf32_big_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;;
bfd_elf32_bigarc_vec) tb="$tb elf32-arc.lo elf32.lo $elf" ;;
bfd_elf32_bigarm_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
+ bfd_elf32_bigarm_nacl_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
bfd_elf32_bigarm_symbian_vec)
tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
bfd_elf32_bigarm_vxworks_vec)
@@ -729,6 +730,7 @@ do
bfd_elf32_littlearm_vxworks_vec)
tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
bfd_elf32_littlearm_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
+ bfd_elf32_littlearm_nacl_vec) tb="$tb elf32-arm.lo elf32.lo elf-vxworks.lo $elf" ;;
bfd_elf32_littlemips_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
bfd_elf32_littlemips_vxworks_vec)
tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;;
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 62a0b8d..f459204 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -1,6 +1,5 @@
/* 32-bit ELF support for ARM
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright 1998-2012 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -15468,6 +15467,25 @@ const struct elf_size_info elf32_arm_size_info =
#include "elf32-target.h"
+/* Native Client targets. */
+
+#undef TARGET_LITTLE_SYM
+#define TARGET_LITTLE_SYM bfd_elf32_littlearm_nacl_vec
+#undef TARGET_LITTLE_NAME
+#define TARGET_LITTLE_NAME "elf32-littlearm-nacl"
+#undef TARGET_BIG_SYM
+#define TARGET_BIG_SYM bfd_elf32_bigarm_nacl_vec
+#undef TARGET_BIG_NAME
+#define TARGET_BIG_NAME "elf32-bigarm-nacl"
+
+#undef elf32_bed
+#define elf32_bed elf32_arm_nacl_bed
+
+#undef ELF_MAXPAGESIZE
+#define ELF_MAXPAGESIZE 0x10000
+
+#include "elf32-target.h"
+
/* VxWorks Targets. */
#undef TARGET_LITTLE_SYM
diff --git a/bfd/targets.c b/bfd/targets.c
index e5d08af..fa64ee9 100644
--- a/bfd/targets.c
+++ b/bfd/targets.c
@@ -1,7 +1,5 @@
/* Generic target-file-type support for the BFD library.
- Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
- Free Software Foundation, Inc.
+ Copyright 1990-2012 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -596,6 +594,7 @@ extern const bfd_target bfd_elf32_bfinfdpic_vec;
extern const bfd_target bfd_elf32_big_generic_vec;
extern const bfd_target bfd_elf32_bigarc_vec;
extern const bfd_target bfd_elf32_bigarm_vec;
+extern const bfd_target bfd_elf32_bigarm_nacl_vec;
extern const bfd_target bfd_elf32_bigarm_symbian_vec;
extern const bfd_target bfd_elf32_bigarm_vxworks_vec;
extern const bfd_target bfd_elf32_bigmips_vec;
@@ -634,6 +633,7 @@ extern const bfd_target bfd_elf32_lm32fdpic_vec;
extern const bfd_target bfd_elf32_little_generic_vec;
extern const bfd_target bfd_elf32_littlearc_vec;
extern const bfd_target bfd_elf32_littlearm_vec;
+extern const bfd_target bfd_elf32_littlearm_nacl_vec;
extern const bfd_target bfd_elf32_littlearm_symbian_vec;
extern const bfd_target bfd_elf32_littlearm_vxworks_vec;
extern const bfd_target bfd_elf32_littlemips_vec;
diff --git a/gas/ChangeLog b/gas/ChangeLog
index be8e7c5..f0fd00c 100644
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 02a63a6..790351a 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -1,7 +1,5 @@
/* tc-arm.c -- Assemble for the ARM
- Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
- Free Software Foundation, Inc.
+ Copyright 1994-2012 Free Software Foundation, Inc.
Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
Modified by David Taylor (dtaylor@armltd.co.uk)
Cirrus coprocessor mods by Aldy Hernandez (aldyh@redhat.com)
@@ -22211,6 +22209,10 @@ elf32_arm_target_format (void)
return (target_big_endian
? "elf32-bigarm-vxworks"
: "elf32-littlearm-vxworks");
+#elif defined (TE_NACL)
+ return (target_big_endian
+ ? "elf32-bigarm-nacl"
+ : "elf32-littlearm-nacl");
#else
if (target_big_endian)
return "elf32-bigarm";
diff --git a/gas/config/te-nacl.h b/gas/config/te-nacl.h
index 6550756..d64a44d 100644
--- a/gas/config/te-nacl.h
+++ b/gas/config/te-nacl.h
@@ -18,6 +18,13 @@
02110-1301, USA. */
#define TE_NACL
+
+#define LOCAL_LABELS_DOLLAR 1
#define LOCAL_LABELS_FB 1
+/* These are for ARM but don't hurt other CPU targets.
+ They match the settings from te-armeabi.h; NaCl/ARM is based on EABI. */
+#define FPU_DEFAULT FPU_ARCH_VFP
+#define EABI_DEFAULT EF_ARM_EABI_VER5
+
#include "obj-format.h"
diff --git a/gas/configure.tgt b/gas/configure.tgt
index 06fb6ca..367e2b7 100644
--- a/gas/configure.tgt
+++ b/gas/configure.tgt
@@ -117,6 +117,7 @@ case ${generic_target} in
arm-*-linux-*) fmt=elf em=linux ;;
arm-*-uclinux*eabi*) fmt=elf em=armlinuxeabi ;;
arm-*-uclinux*) fmt=elf em=linux ;;
+ arm-*-nacl*) fmt=elf em=nacl ;;
arm-*-netbsdelf*) fmt=elf em=nbsd ;;
arm-*-*n*bsd*) fmt=aout em=nbsd ;;
arm-*-nto*) fmt=elf ;;
diff --git a/gas/testsuite/gas/arm/arch4t-eabi.d b/gas/testsuite/gas/arm/arch4t-eabi.d
index afd92f7..4289d60 100644
--- a/gas/testsuite/gas/arm/arch4t-eabi.d
+++ b/gas/testsuite/gas/arm/arch4t-eabi.d
@@ -2,7 +2,7 @@
# as: -march=armv4t
# objdump: -dr --prefix-addresses --show-raw-insn
# source: arch4t.s
-# target: *-*-*eabi *-*-symbianelf
+# target: *-*-*eabi *-*-symbianelf *-*-nacl*
.*: +file format .*arm.*
diff --git a/gas/testsuite/gas/arm/arch4t.d b/gas/testsuite/gas/arm/arch4t.d
index 6655852..1f8c320 100644
--- a/gas/testsuite/gas/arm/arch4t.d
+++ b/gas/testsuite/gas/arm/arch4t.d
@@ -2,7 +2,7 @@
# as: -march=armv4t
# objdump: -dr --prefix-addresses --show-raw-insn
# EABI targets have their own variant.
-# not-target: *-*-*eabi *-*-symbianelf
+# not-target: *-*-*eabi *-*-symbianelf *-*-nacl*
.*: +file format .*arm.*
diff --git a/gas/testsuite/gas/arm/got_prel.d b/gas/testsuite/gas/arm/got_prel.d
index ad74dfc..74a0bb5 100644
--- a/gas/testsuite/gas/arm/got_prel.d
+++ b/gas/testsuite/gas/arm/got_prel.d
@@ -2,7 +2,7 @@
# source: got_prel.s
# as: -march=armv5te -meabi=5
# readelf: -x 4 -r
-# target: *-*-*eabi *-*-symbianelf *-*-linux-* *-*-elf
+# target: *-*-*eabi *-*-symbianelf *-*-linux-* *-*-elf *-*-nacl*
Relocation section '.rel.text.foo' at offset 0x3f0 contains 1 entries:
Offset Info Type Sym.Value Sym. Name
diff --git a/gas/testsuite/gas/arm/mapdir.d b/gas/testsuite/gas/arm/mapdir.d
index 549fe94..bb37a6b 100644
--- a/gas/testsuite/gas/arm/mapdir.d
+++ b/gas/testsuite/gas/arm/mapdir.d
@@ -2,7 +2,7 @@
#objdump: --syms --special-syms -d
#name: ARM Mapping Symbols for .arm/.thumb
# This test is only valid on EABI based ports.
-#target: *-*-*eabi *-*-symbianelf *-*-linux-* *-*-elf
+#target: *-*-*eabi *-*-symbianelf *-*-linux-* *-*-elf *-*-nacl*
#source: mapdir.s
diff --git a/gas/testsuite/gas/arm/mapmisc.d b/gas/testsuite/gas/arm/mapmisc.d
index c130b65..6196b6b 100644
--- a/gas/testsuite/gas/arm/mapmisc.d
+++ b/gas/testsuite/gas/arm/mapmisc.d
@@ -2,7 +2,7 @@
#objdump: --syms --special-syms -d
#name: ARM Mapping Symbols for miscellaneous directives
# This test is only valid on EABI based ports.
-#target: *-*-*eabi *-*-symbianelf *-*-linux-* *-*-elf
+#target: *-*-*eabi *-*-symbianelf *-*-linux-* *-*-elf *-*-nacl*
#source: mapmisc.s
diff --git a/gas/testsuite/gas/arm/mapsecs.d b/gas/testsuite/gas/arm/mapsecs.d
index 8cd0baf..b0d0421 100644
--- a/gas/testsuite/gas/arm/mapsecs.d
+++ b/gas/testsuite/gas/arm/mapsecs.d
@@ -2,7 +2,7 @@
#objdump: --syms --special-syms -d
#name: ARM Mapping Symbols with multiple sections
# This test is only valid on EABI based ports.
-#target: *-*-*eabi *-*-symbianelf *-*-linux-* *-*-elf
+#target: *-*-*eabi *-*-symbianelf *-*-linux-* *-*-elf *-*-nacl*
#source: mapsecs.s
diff --git a/gas/testsuite/gas/arm/mapshort-eabi.d b/gas/testsuite/gas/arm/mapshort-eabi.d
index 1f920d3..69a5a22 100644
--- a/gas/testsuite/gas/arm/mapshort-eabi.d
+++ b/gas/testsuite/gas/arm/mapshort-eabi.d
@@ -1,7 +1,7 @@
#objdump: --syms --special-syms -d
#name: ARM Mapping Symbols for .short (EABI version)
# This test is only valid on EABI based ports.
-#target: *-*-*eabi *-*-symbianelf *-*-linux-* *-*-elf
+#target: *-*-*eabi *-*-symbianelf *-*-linux-* *-*-elf *-*-nacl*
#source: mapshort.s
# Test the generation and use of ARM ELF Mapping Symbols
diff --git a/gas/testsuite/gas/arm/mapshort-elf.d b/gas/testsuite/gas/arm/mapshort-elf.d
index 38b290e..b0b62cf 100644
--- a/gas/testsuite/gas/arm/mapshort-elf.d
+++ b/gas/testsuite/gas/arm/mapshort-elf.d
@@ -1,7 +1,7 @@
#objdump: --syms --special-syms -d
#name: ARM Mapping Symbols for .short (ELF version)
# This test is only valid on ELF based ports.
-#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix* *-*-*eabi *-*-syymbianelf *-*-linux-* *-*-vxworks *-*-elf
+#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix* *-*-*eabi *-*-syymbianelf *-*-linux-* *-*-vxworks *-*-elf *-*-nacl*
#source: mapshort.s
# Test the generation and use of ARM ELF Mapping Symbols
diff --git a/gas/testsuite/gas/arm/thumb-eabi.d b/gas/testsuite/gas/arm/thumb-eabi.d
index 9fd77d1..602dafb 100644
--- a/gas/testsuite/gas/arm/thumb-eabi.d
+++ b/gas/testsuite/gas/arm/thumb-eabi.d
@@ -2,7 +2,7 @@
# as: -mcpu=arm7t
# objdump: -dr --prefix-addresses --show-raw-insn
# source: thumb.s
-# target: *-*-*eabi *-*-symbianelf
+# target: *-*-*eabi *-*-symbianelf *-*-nacl*
.*: +file format .*arm.*
diff --git a/gas/testsuite/gas/arm/thumb.d b/gas/testsuite/gas/arm/thumb.d
index 6d88508..514152b 100644
--- a/gas/testsuite/gas/arm/thumb.d
+++ b/gas/testsuite/gas/arm/thumb.d
@@ -3,7 +3,7 @@
# objdump: -dr --prefix-addresses --show-raw-insn
# The arm-aout and arm-pe ports do not support Thumb branch relocations.
# EABI targets have their own variant.
-# not-target: *-*-*aout* *-*-pe *-*-*eabi *-*-symbianelf
+# not-target: *-*-*aout* *-*-pe *-*-*eabi *-*-symbianelf *-*-nacl*
.*: +file format .*arm.*
diff --git a/gas/testsuite/gas/arm/thumbrel.d b/gas/testsuite/gas/arm/thumbrel.d
index fff41af..a87353e 100644
--- a/gas/testsuite/gas/arm/thumbrel.d
+++ b/gas/testsuite/gas/arm/thumbrel.d
@@ -1,6 +1,6 @@
#objdump: -sr
# This test is only valid on EABI based ports.
-#target: *-*-*eabi *-*-symbianelf
+#target: *-*-*eabi *-*-symbianelf *-*-nacl*
.*: file format.*