bfd/
authorRoland McGrath <roland@gnu.org>
Mon, 26 Aug 2013 22:18:07 +0000 (22:18 +0000)
committerRoland McGrath <roland@gnu.org>
Mon, 26 Aug 2013 22:18:07 +0000 (22:18 +0000)
* archures.c (bfd_mach_i386_nacl, bfd_mach_i386_i386_nacl): New macros.
(bfd_mach_x86_64_nacl, bfd_mach_x64_32_nacl): New macros.
* cpu-i386.c (bfd_arch_i386_onebyte_nop_fill): New function.
(bfd_i386_nacl_arch): New variable.
(bfd_x86_64_nacl_arch, bfd_x64_32_nacl_arch): New variables.
(bfd_x64_32_arch_intel_syntax): Link them into the list.
* bfd-in2.h: Regenerate.

ld/
* emulparams/elf_i386_nacl.sh (ARCH): Set to i386:nacl.
* emulparams/elf_x86_64_nacl.sh (ARCH): Set to i386:x86-64:nacl.
* emulparams/elf32_x86_64_nacl.sh (ARCH): Set to i386:x64-32:nacl.

ld/testsuite/
* ld-x86-64/x86-64.exp (Mixed x86_64 and i386 input test 1):
Loosen string match to admit i386:x86-64*.
(Mixed x86_64 and i386 input test 2): Likewise.
* 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.
* ld-x86-64/ia32-2.d: Likewise, and i386.* too.
* ld-x86-64/ia32-3.d: Likewise.

16 files changed:
bfd/ChangeLog
bfd/archures.c
bfd/bfd-in2.h
bfd/cpu-i386.c
ld/ChangeLog
ld/emulparams/elf32_x86_64_nacl.sh
ld/emulparams/elf_i386_nacl.sh
ld/emulparams/elf_x86_64_nacl.sh
ld/testsuite/ChangeLog
ld/testsuite/ld-x86-64/ia32-2.d
ld/testsuite/ld-x86-64/ia32-3.d
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 ebae60d7c84af8a7da6399a720285f089c44adfc..815503bc0ddf980e85c8f14e41497188c4861964 100644 (file)
@@ -1,3 +1,13 @@
+2013-08-26  Roland McGrath  <mcgrathr@google.com>
+
+       * archures.c (bfd_mach_i386_nacl, bfd_mach_i386_i386_nacl): New macros.
+       (bfd_mach_x86_64_nacl, bfd_mach_x64_32_nacl): New macros.
+       * cpu-i386.c (bfd_arch_i386_onebyte_nop_fill): New function.
+       (bfd_i386_nacl_arch): New variable.
+       (bfd_x86_64_nacl_arch, bfd_x64_32_nacl_arch): New variables.
+       (bfd_x64_32_arch_intel_syntax): Link them into the list.
+       * bfd-in2.h: Regenerate.
+
 2013-08-26  Roland McGrath  <mcgrathr@google.com>
 
        * elf-nacl.c (nacl_modify_segment_map): Fix logic reordering the
index d00b0e19d4489ce7ac94827a4c1c469759a7b3e6..53962bfa38c7537c6b780f061e15d719efc409dd 100644 (file)
@@ -189,9 +189,13 @@ 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)
index 0cf9a2966cf9b6d274f4af4338c75e5f034a52ab..41f7a682c3db6ab73d16bf7d5903c9bdd200e738 100644 (file)
@@ -7,7 +7,7 @@
 
 /* Main header file for the bfd library -- portable access to object files.
 
-   Copyright 1990-2013 2013 Free Software Foundation, Inc.
+   Copyright 1990-2013 Free Software Foundation, Inc.
 
    Contributed by Cygnus Support.
 
@@ -1944,9 +1944,13 @@ 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)
index 6174612ebb8fa24d72fc5fdc45041a26aef10acd..2a6bb97b944b37dbde728a07b937928a839e38ee 100644 (file)
@@ -1,6 +1,6 @@
 /* BFD support for the Intel 386 architecture.
    Copyright 1992, 1994, 1995, 1996, 1998, 2000, 2001, 2002, 2004, 2005,
-   2007, 2009, 2010, 2011
+   2007, 2009, 2010, 2011, 2013
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -119,6 +119,71 @@ bfd_arch_i386_long_nop_fill (bfd_size_type count,
   return bfd_arch_i386_fill (count, code, TRUE);
 }
 
+/* Fill the buffer with zero, or one-byte nop instructions if CODE is TRUE.  */
+
+static void *
+bfd_arch_i386_onebyte_nop_fill (bfd_size_type count,
+                               bfd_boolean is_bigendian ATTRIBUTE_UNUSED,
+                               bfd_boolean code)
+{
+  void *fill = bfd_malloc (count);
+  if (fill != NULL)
+    memset (fill, code ? 0x90 : 0, count);
+  return fill;
+}
+
+
+static const bfd_arch_info_type bfd_x64_32_nacl_arch =
+{
+  64, /* 64 bits in a word */
+  64, /* 64 bits in an address */
+  8,  /* 8 bits in a byte */
+  bfd_arch_i386,
+  bfd_mach_x64_32_nacl,
+  "i386",
+  "i386:x64-32:nacl",
+  3,
+  FALSE,
+  bfd_i386_compatible,
+  bfd_default_scan,
+  bfd_arch_i386_onebyte_nop_fill,
+  NULL
+};
+
+static const bfd_arch_info_type bfd_x86_64_nacl_arch =
+{
+  64, /* 64 bits in a word */
+  64, /* 64 bits in an address */
+  8,  /* 8 bits in a byte */
+  bfd_arch_i386,
+  bfd_mach_x86_64_nacl,
+  "i386",
+  "i386:x86-64:nacl",
+  3,
+  FALSE,
+  bfd_i386_compatible,
+  bfd_default_scan,
+  bfd_arch_i386_onebyte_nop_fill,
+  &bfd_x64_32_nacl_arch
+};
+
+const bfd_arch_info_type bfd_i386_nacl_arch =
+{
+  32,  /* 32 bits in a word */
+  32,  /* 32 bits in an address */
+  8,   /* 8 bits in a byte */
+  bfd_arch_i386,
+  bfd_mach_i386_i386_nacl,
+  "i386",
+  "i386:nacl",
+  3,
+  TRUE,
+  bfd_i386_compatible,
+  bfd_default_scan,
+  bfd_arch_i386_onebyte_nop_fill,
+  &bfd_x86_64_nacl_arch
+};
+
 static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax =
 {
   64, /* 64 bits in a word */
@@ -133,7 +198,7 @@ static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax =
   bfd_i386_compatible,
   bfd_default_scan,
   bfd_arch_i386_long_nop_fill,
-  0
+  &bfd_i386_nacl_arch
 };
 
 static const bfd_arch_info_type bfd_x86_64_arch_intel_syntax =
index 27b4be715ee9ad72dad44c84d3a6dd8d43572e95..b8341381c24bbdf488b5df9d1526889eebafca87 100644 (file)
@@ -1,3 +1,9 @@
+2013-08-26  Roland McGrath  <mcgrathr@google.com>
+
+       * emulparams/elf_i386_nacl.sh (ARCH): Set to i386:nacl.
+       * emulparams/elf_x86_64_nacl.sh (ARCH): Set to i386:x86-64:nacl.
+       * emulparams/elf32_x86_64_nacl.sh (ARCH): Set to i386:x64-32:nacl.
+
 2013-08-23  Roland McGrath  <mcgrathr@google.com>
 
        * emulparams/elf_nacl.sh (nacl_rodata_addr): Don't add in
index 4570ef98f22dd163c05da9dfac5ba1947a131fad..ea98b287b2354d6d8b164936d9bde3a942fd517f 100644 (file)
@@ -1,3 +1,4 @@
 . ${srcdir}/emulparams/elf32_x86_64.sh
 . ${srcdir}/emulparams/elf_nacl.sh
 OUTPUT_FORMAT="elf32-x86-64-nacl"
+ARCH="i386:x64-32:nacl"        # The :nacl just means one-byte nops for code fill.
index 81992d75845cbfd0537479feff8ef189adad660c..294f7f5aba0eea99af75ba4f9379b2f97ee4b16a 100644 (file)
@@ -1,3 +1,4 @@
 . ${srcdir}/emulparams/elf_i386.sh
 . ${srcdir}/emulparams/elf_nacl.sh
 OUTPUT_FORMAT="elf32-i386-nacl"
+ARCH="i386:nacl"       # The :nacl just means one-byte nops for code fill.
index 7c79eee2c648e4075dc5683f4260e604f45d1ba1..a6966bdaf3b40bd0d90a44b7be7a7dc5a9a85375 100644 (file)
@@ -1,3 +1,4 @@
 . ${srcdir}/emulparams/elf_x86_64.sh
 . ${srcdir}/emulparams/elf_nacl.sh
 OUTPUT_FORMAT="elf64-x86-64-nacl"
+ARCH="i386:x86-64:nacl"        # The :nacl just means one-byte nops for code fill.
index 3adba9b2a1f00d008b51c03472944422dce920c8..f27092fb9b38a425a5aa5dcedc260eb0762da6ae 100644 (file)
@@ -1,3 +1,15 @@
+2013-08-26  Roland McGrath  <mcgrathr@google.com>
+
+       * ld-x86-64/x86-64.exp (Mixed x86_64 and i386 input test 1):
+       Loosen string match to admit i386:x86-64*.
+       (Mixed x86_64 and i386 input test 2): Likewise.
+       * 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.
+       * ld-x86-64/ia32-2.d: Likewise, and i386.* too.
+       * ld-x86-64/ia32-3.d: Likewise.
+
 2013-08-26  Roland McGrath  <mcgrathr@google.com>
 
        * ld-x86-64/ilp32-4-nacl.d: Loosen .shstrtab line regexp to match
index 3a180b5b2eae38ccf0b6ea0c3ea122d1dcfd2b85..cea492730bb871114cf47312b3d9c5dab42893a4 100644 (file)
@@ -1,4 +1,4 @@
 #source: dummy.s
 #as: --32
 #ld: -m elf_i386 tmpdir/start32.o tmpdir/foox32.o
-#error: .*i386:x64-32 architecture of input file `tmpdir/foox32.o' is incompatible with i386 output
+#error: .*i386:x64-32.* architecture of input file `tmpdir/foox32.o' is incompatible with i386.* output
index 1528399f360f6c8d254afb86e7d3cc0d7c90afa1..ecd8b2eb7808511775c022fcd078fcf59f586b6d 100644 (file)
@@ -1,4 +1,4 @@
 #source: dummy.s
 #as: --32
 #ld: -m elf_i386 tmpdir/start32.o tmpdir/foo64.o
-#error: .*i386:x86-64 architecture of input file `tmpdir/foo64.o' is incompatible with i386 output
+#error: .*i386:x86-64.* architecture of input file `tmpdir/foo64.o' is incompatible with i386.* output
index 19fc671bbc1ea02dd5b053de5ddb40ae558603db..65b5298457b73424675d36e77d0476fa3c9bf5cf 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 fdd906527fb6f81caada0ccfb05769233fdda120..b05e531c60765e8b24a247c9cf295b0a33811b83 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 fde32020fa42d01e3c3891ec96932a5655a86ff8..7515881a8b11ff853ed9b0dfb27da63903320508 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 c89fbc43adda12ac55c918736477ac9b452f7d73..e60efeb9353288bc81674c02e6cd182f58fe251a 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 0fd03121ae6ad8a9a98a9cdfcb1c8ca6caf6ef4d..8ca2da757a646a7317e1083ad4611c466973d8dd 100644 (file)
@@ -1,5 +1,5 @@
 # Expect script for ld-x86_64 tests
-#   Copyright (C) 2002, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+#   Copyright (C) 2002, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
 #   Free Software Foundation
 #
 # This file is part of the GNU Binutils.
@@ -163,7 +163,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"
@@ -173,7 +173,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"