Set CPU type in BFD backend for x86_64-nacl* and i?86-nacl* targets
authorRoland McGrath <mcgrathr@google.com>
Wed, 6 Nov 2013 22:47:05 +0000 (14:47 -0800)
committerRoland McGrath <mcgrathr@google.com>
Thu, 7 Nov 2013 18:00:32 +0000 (10:00 -0800)
bfd/
* archures.c (bfd_mach_i386_nacl): Fix definition so it doesn't
collide with bfd_mach_l1om.
* bfd-in2.h: Regenerate.

* elf32-i386.c (elf32_i386_nacl_elf_object_p): New function.
(elf_backend_object_p): Use that in elf32-i386-nacl definition.
* elf64-x86-64.c (elf64_x86_64_nacl_elf_object_p): New function.
(elf_backend_object_p): Use that in elf64-x86-64-nacl definition.
(elf32_x86_64_nacl_elf_object_p): New function.
(elf_backend_object_p): Use that in elf32-x86-64-nacl definition.

binutils/
* objdump.c (dump_dwarf): Grok bfd_mach_x86_64_nacl and
bfd_mach_x64_32_nacl as equivalent to bfd_mach_x86_64.

ld/testsuite/
* ld-x86-64/x86-64.exp (mixed1, mixed2): Loosen error string match
so it accepts "i386:nacl" in place of "i386".
* ld-x86-64/ilp32-2.d: Likewise.
* ld-x86-64/ilp32-3.d: Likewise.
* ld-x86-64/lp64-2.d: Likewise.
* ld-x86-64/lp64-3.d: Likewise.

13 files changed:
bfd/ChangeLog
bfd/archures.c
bfd/bfd-in2.h
bfd/elf32-i386.c
bfd/elf64-x86-64.c
binutils/ChangeLog
binutils/objdump.c
ld/testsuite/ChangeLog
ld/testsuite/ld-x86-64/ilp32-2.d
ld/testsuite/ld-x86-64/ilp32-3.d
ld/testsuite/ld-x86-64/lp64-2.d
ld/testsuite/ld-x86-64/lp64-3.d
ld/testsuite/ld-x86-64/x86-64.exp

index 948afda..1b33e8a 100644 (file)
@@ -1,3 +1,16 @@
+2013-11-07  Roland McGrath  <mcgrathr@google.com>
+
+       * archures.c (bfd_mach_i386_nacl): Fix definition so it doesn't
+       collide with bfd_mach_l1om.
+       * bfd-in2.h: Regenerate.
+
+       * elf32-i386.c (elf32_i386_nacl_elf_object_p): New function.
+       (elf_backend_object_p): Use that in elf32-i386-nacl definition.
+       * elf64-x86-64.c (elf64_x86_64_nacl_elf_object_p): New function.
+       (elf_backend_object_p): Use that in elf64-x86-64-nacl definition.
+       (elf32_x86_64_nacl_elf_object_p): New function.
+       (elf_backend_object_p): Use that in elf32-x86-64-nacl definition.
+
 2013-11-05  DJ Delorie  <dj@redhat.com>
 
        * elf32-rl78.c (elf32_rl78_relax_delete_bytes): Make sure relocs
index 53962bf..97c540a 100644 (file)
@@ -189,19 +189,19 @@ DESCRIPTION
 .#define bfd_mach_i386_i386            (1 << 2)
 .#define bfd_mach_x86_64               (1 << 3)
 .#define bfd_mach_x64_32               (1 << 4)
-.#define bfd_mach_i386_nacl            (1 << 5)
 .#define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax)
 .#define bfd_mach_x86_64_intel_syntax  (bfd_mach_x86_64 | bfd_mach_i386_intel_syntax)
 .#define bfd_mach_x64_32_intel_syntax  (bfd_mach_x64_32 | bfd_mach_i386_intel_syntax)
-.#define bfd_mach_i386_i386_nacl       (bfd_mach_i386_i386 | bfd_mach_i386_nacl)
-.#define bfd_mach_x86_64_nacl          (bfd_mach_x86_64 | bfd_mach_i386_nacl)
-.#define bfd_mach_x64_32_nacl          (bfd_mach_x64_32 | bfd_mach_i386_nacl)
 .  bfd_arch_l1om,   {* Intel L1OM *}
 .#define bfd_mach_l1om                 (1 << 5)
 .#define bfd_mach_l1om_intel_syntax    (bfd_mach_l1om | bfd_mach_i386_intel_syntax)
 .  bfd_arch_k1om,   {* Intel K1OM *}
 .#define bfd_mach_k1om                 (1 << 6)
 .#define bfd_mach_k1om_intel_syntax    (bfd_mach_k1om | bfd_mach_i386_intel_syntax)
+.#define bfd_mach_i386_nacl            (1 << 7)
+.#define bfd_mach_i386_i386_nacl       (bfd_mach_i386_i386 | bfd_mach_i386_nacl)
+.#define bfd_mach_x86_64_nacl          (bfd_mach_x86_64 | bfd_mach_i386_nacl)
+.#define bfd_mach_x64_32_nacl          (bfd_mach_x64_32 | bfd_mach_i386_nacl)
 .  bfd_arch_we32k,     {* AT&T WE32xxx *}
 .  bfd_arch_tahoe,     {* CCI/Harris Tahoe *}
 .  bfd_arch_i860,      {* Intel 860 *}
index 644f89d..79f2130 100644 (file)
@@ -1946,19 +1946,19 @@ enum bfd_architecture
 #define bfd_mach_i386_i386             (1 << 2)
 #define bfd_mach_x86_64                (1 << 3)
 #define bfd_mach_x64_32                (1 << 4)
-#define bfd_mach_i386_nacl             (1 << 5)
 #define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax)
 #define bfd_mach_x86_64_intel_syntax   (bfd_mach_x86_64 | bfd_mach_i386_intel_syntax)
 #define bfd_mach_x64_32_intel_syntax   (bfd_mach_x64_32 | bfd_mach_i386_intel_syntax)
-#define bfd_mach_i386_i386_nacl        (bfd_mach_i386_i386 | bfd_mach_i386_nacl)
-#define bfd_mach_x86_64_nacl           (bfd_mach_x86_64 | bfd_mach_i386_nacl)
-#define bfd_mach_x64_32_nacl           (bfd_mach_x64_32 | bfd_mach_i386_nacl)
   bfd_arch_l1om,   /* Intel L1OM */
 #define bfd_mach_l1om                  (1 << 5)
 #define bfd_mach_l1om_intel_syntax     (bfd_mach_l1om | bfd_mach_i386_intel_syntax)
   bfd_arch_k1om,   /* Intel K1OM */
 #define bfd_mach_k1om                  (1 << 6)
 #define bfd_mach_k1om_intel_syntax     (bfd_mach_k1om | bfd_mach_i386_intel_syntax)
+#define bfd_mach_i386_nacl             (1 << 7)
+#define bfd_mach_i386_i386_nacl        (bfd_mach_i386_i386 | bfd_mach_i386_nacl)
+#define bfd_mach_x86_64_nacl           (bfd_mach_x86_64 | bfd_mach_i386_nacl)
+#define bfd_mach_x64_32_nacl           (bfd_mach_x64_32 | bfd_mach_i386_nacl)
   bfd_arch_we32k,     /* AT&T WE32xxx */
   bfd_arch_tahoe,     /* CCI/Harris Tahoe */
   bfd_arch_i860,      /* Intel 860 */
index 070e4c4..a623a13 100644 (file)
@@ -5296,9 +5296,19 @@ static const struct elf_i386_backend_data elf_i386_nacl_arch_bed =
     0,                                  /* is_vxworks */
   };
 
+static bfd_boolean
+elf32_i386_nacl_elf_object_p (bfd *abfd)
+{
+  /* Set the right machine number for a NaCl i386 ELF32 file.  */
+  bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_i386_i386_nacl);
+  return TRUE;
+}
+
 #undef elf_backend_arch_data
 #define elf_backend_arch_data  &elf_i386_nacl_arch_bed
 
+#undef elf_backend_object_p
+#define elf_backend_object_p                   elf32_i386_nacl_elf_object_p
 #undef elf_backend_modify_segment_map
 #define        elf_backend_modify_segment_map          nacl_modify_segment_map
 #undef elf_backend_modify_program_headers
@@ -5309,6 +5319,7 @@ static const struct elf_i386_backend_data elf_i386_nacl_arch_bed =
 #include "elf32-target.h"
 
 /* Restore defaults.  */
+#undef elf_backend_object_p
 #undef elf_backend_modify_segment_map
 #undef elf_backend_modify_program_headers
 #undef elf_backend_final_write_processing
index c95fdf5..3b3f890 100644 (file)
@@ -5348,6 +5348,14 @@ static const struct bfd_elf_special_section
 
 /* Native Client support.  */
 
+static bfd_boolean
+elf64_x86_64_nacl_elf_object_p (bfd *abfd)
+{
+  /* Set the right machine number for a NaCl x86-64 ELF64 file.  */
+  bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_x86_64_nacl);
+  return TRUE;
+}
+
 #undef TARGET_LITTLE_SYM
 #define        TARGET_LITTLE_SYM               bfd_elf64_x86_64_nacl_vec
 #undef TARGET_LITTLE_NAME
@@ -5480,6 +5488,8 @@ static const struct elf_x86_64_backend_data elf_x86_64_nacl_arch_bed =
 #undef elf_backend_arch_data
 #define        elf_backend_arch_data   &elf_x86_64_nacl_arch_bed
 
+#undef elf_backend_object_p
+#define elf_backend_object_p                   elf64_x86_64_nacl_elf_object_p
 #undef elf_backend_modify_segment_map
 #define        elf_backend_modify_segment_map          nacl_modify_segment_map
 #undef elf_backend_modify_program_headers
@@ -5491,6 +5501,14 @@ static const struct elf_x86_64_backend_data elf_x86_64_nacl_arch_bed =
 
 /* Native Client x32 support.  */
 
+static bfd_boolean
+elf32_x86_64_nacl_elf_object_p (bfd *abfd)
+{
+  /* Set the right machine number for a NaCl x86-64 ELF32 file.  */
+  bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_x64_32_nacl);
+  return TRUE;
+}
+
 #undef  TARGET_LITTLE_SYM
 #define TARGET_LITTLE_SYM              bfd_elf32_x86_64_nacl_vec
 #undef  TARGET_LITTLE_NAME
@@ -5511,7 +5529,7 @@ static const struct elf_x86_64_backend_data elf_x86_64_nacl_arch_bed =
 
 #undef elf_backend_object_p
 #define elf_backend_object_p \
-  elf32_x86_64_elf_object_p
+  elf32_x86_64_nacl_elf_object_p
 
 #undef elf_backend_bfd_from_remote_memory
 #define elf_backend_bfd_from_remote_memory \
index 457f0b0..1ab6e0d 100644 (file)
@@ -1,3 +1,8 @@
+2013-11-07  Roland McGrath  <mcgrathr@google.com>
+
+       * objdump.c (dump_dwarf): Grok bfd_mach_x86_64_nacl and
+       bfd_mach_x64_32_nacl as equivalent to bfd_mach_x86_64.
+
 2013-10-30  Alan Modra  <amodra@gmail.com>
 
        * readelf.c (get_ppc_dynamic_type): Replace PPC_TLSOPT with PPC_OPT.
index 37962cb..0098ae7 100644 (file)
@@ -2394,8 +2394,10 @@ dump_dwarf (bfd *abfd)
        {
        case bfd_mach_x86_64:
        case bfd_mach_x86_64_intel_syntax:
+       case bfd_mach_x86_64_nacl:
        case bfd_mach_x64_32:
        case bfd_mach_x64_32_intel_syntax:
+       case bfd_mach_x64_32_nacl:
          init_dwarf_regnames_x86_64 ();
          break;
 
index 6836042..e06f1df 100644 (file)
@@ -1,3 +1,12 @@
+2013-11-07  Roland McGrath  <mcgrathr@google.com>
+
+       * ld-x86-64/x86-64.exp (mixed1, mixed2): Loosen error string match
+       so it accepts "i386:nacl" in place of "i386".
+       * ld-x86-64/ilp32-2.d: Likewise.
+       * ld-x86-64/ilp32-3.d: Likewise.
+       * ld-x86-64/lp64-2.d: Likewise.
+       * ld-x86-64/lp64-3.d: Likewise.
+
 2013-11-05  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/4409
index 65b5298..fde3e8a 100644 (file)
@@ -1,4 +1,4 @@
 #source: dummy.s
 #as: --x32
 #ld: -m elf32_x86_64 tmpdir/startx32.o tmpdir/foo32.o
-#error: .*i386 architecture of input file `tmpdir/foo32.o' is incompatible with i386:x64-32.* output
+#error: .*i386(:.+)? architecture of input file `tmpdir/foo32.o' is incompatible with i386:x64-32.* output
index b05e531..a9080a0 100644 (file)
@@ -1,4 +1,4 @@
 #source: dummy.s
 #as: --x32
 #ld: -m elf32_x86_64 tmpdir/startx32.o tmpdir/foo64.o
-#error: .*i386:x86-64 architecture of input file `tmpdir/foo64.o' is incompatible with i386:x64-32.* output
+#error: .*i386:x86-64(:.+)? architecture of input file `tmpdir/foo64.o' is incompatible with i386:x64-32.* output
index 7515881..af7582a 100644 (file)
@@ -1,4 +1,4 @@
 #source: dummy.s
 #as: --64
 #ld: -m elf_x86_64 tmpdir/start64.o tmpdir/foo32.o
-#error: .*i386 architecture of input file `tmpdir/foo32.o' is incompatible with i386:x86-64.* output
+#error: .*i386(:.+)? architecture of input file `tmpdir/foo32.o' is incompatible with i386:x86-64.* output
index e60efeb..0e995c8 100644 (file)
@@ -1,4 +1,4 @@
 #source: dummy.s
 #as: --64
 #ld: -m elf_x86_64 tmpdir/start64.o tmpdir/foox32.o
-#error: .*i386:x64-32 architecture of input file `tmpdir/foox32.o' is incompatible with i386:x86-64.* output
+#error: .*i386:x64-32(:.+)? architecture of input file `tmpdir/foox32.o' is incompatible with i386:x86-64.* output
index 3ddce84..32927b6 100644 (file)
@@ -172,7 +172,7 @@ global ld
 set test_name "Mixed x86_64 and i386 input test 1"
 set test mixed1
 if { ![ld_simple_link $ld tmpdir/$test "-m$emul tmpdir/${test}a.o tmpdir/${test}b.o"] } {
-    if [string match "*i386 architecture of input file `tmpdir/${test}b.o' is incompatible with i386:x86-64* output*" $link_output] {
+    if [string match "*i386* architecture of input file `tmpdir/${test}b.o' is incompatible with i386:x86-64* output*" $link_output] {
        pass "$test_name"
     } {
        fail "$test_name"
@@ -182,7 +182,7 @@ if { ![ld_simple_link $ld tmpdir/$test "-m$emul tmpdir/${test}a.o tmpdir/${test}
 set test_name "Mixed x86_64 and i386 input test 2"
 set test mixed2
 if { ![ld_simple_link $ld tmpdir/$test "-m$emul tmpdir/${test}a.o tmpdir/${test}b.o"] } {
-    if [string match "*i386 architecture of input file `tmpdir/${test}b.o' is incompatible with i386:x86-64* output*" $link_output] {
+    if [string match "*i386* architecture of input file `tmpdir/${test}b.o' is incompatible with i386:x86-64* output*" $link_output] {
        pass "$test_name"
     } {
        fail "$test_name"