aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog10
-rw-r--r--bfd/archures.c4
-rw-r--r--bfd/bfd-in2.h6
-rw-r--r--bfd/cpu-i386.c69
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/emulparams/elf32_x86_64_nacl.sh1
-rw-r--r--ld/emulparams/elf_i386_nacl.sh1
-rw-r--r--ld/emulparams/elf_x86_64_nacl.sh1
-rw-r--r--ld/testsuite/ChangeLog12
-rw-r--r--ld/testsuite/ld-x86-64/ia32-2.d2
-rw-r--r--ld/testsuite/ld-x86-64/ia32-3.d2
-rw-r--r--ld/testsuite/ld-x86-64/ilp32-2.d2
-rw-r--r--ld/testsuite/ld-x86-64/ilp32-3.d2
-rw-r--r--ld/testsuite/ld-x86-64/lp64-2.d2
-rw-r--r--ld/testsuite/ld-x86-64/lp64-3.d2
-rw-r--r--ld/testsuite/ld-x86-64/x86-64.exp6
16 files changed, 116 insertions, 12 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index ebae60d..815503b 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,15 @@
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
elf_segment_map list. If an executable segment is page-aligned
but does not end with a full page, then append a fake section into
diff --git a/bfd/archures.c b/bfd/archures.c
index d00b0e1..53962bf 100644
--- a/bfd/archures.c
+++ b/bfd/archures.c
@@ -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)
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 0cf9a29..41f7a68 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -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)
diff --git a/bfd/cpu-i386.c b/bfd/cpu-i386.c
index 6174612..2a6bb97 100644
--- a/bfd/cpu-i386.c
+++ b/bfd/cpu-i386.c
@@ -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 =
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 27b4be7..b834138 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -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
diff --git a/ld/emulparams/elf32_x86_64_nacl.sh b/ld/emulparams/elf32_x86_64_nacl.sh
index 4570ef9..ea98b28 100644
--- a/ld/emulparams/elf32_x86_64_nacl.sh
+++ b/ld/emulparams/elf32_x86_64_nacl.sh
@@ -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.
diff --git a/ld/emulparams/elf_i386_nacl.sh b/ld/emulparams/elf_i386_nacl.sh
index 81992d7..294f7f5 100644
--- a/ld/emulparams/elf_i386_nacl.sh
+++ b/ld/emulparams/elf_i386_nacl.sh
@@ -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.
diff --git a/ld/emulparams/elf_x86_64_nacl.sh b/ld/emulparams/elf_x86_64_nacl.sh
index 7c79eee..a6966bd 100644
--- a/ld/emulparams/elf_x86_64_nacl.sh
+++ b/ld/emulparams/elf_x86_64_nacl.sh
@@ -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.
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 3adba9b..f27092f 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,5 +1,17 @@
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
any file offset.
* ld-x86-64/tlsbin-nacl.rd: Update expected code segment PT_LOAD.
diff --git a/ld/testsuite/ld-x86-64/ia32-2.d b/ld/testsuite/ld-x86-64/ia32-2.d
index 3a180b5..cea4927 100644
--- a/ld/testsuite/ld-x86-64/ia32-2.d
+++ b/ld/testsuite/ld-x86-64/ia32-2.d
@@ -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
diff --git a/ld/testsuite/ld-x86-64/ia32-3.d b/ld/testsuite/ld-x86-64/ia32-3.d
index 1528399..ecd8b2e 100644
--- a/ld/testsuite/ld-x86-64/ia32-3.d
+++ b/ld/testsuite/ld-x86-64/ia32-3.d
@@ -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
diff --git a/ld/testsuite/ld-x86-64/ilp32-2.d b/ld/testsuite/ld-x86-64/ilp32-2.d
index 19fc671..65b5298 100644
--- a/ld/testsuite/ld-x86-64/ilp32-2.d
+++ b/ld/testsuite/ld-x86-64/ilp32-2.d
@@ -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
diff --git a/ld/testsuite/ld-x86-64/ilp32-3.d b/ld/testsuite/ld-x86-64/ilp32-3.d
index fdd9065..b05e531 100644
--- a/ld/testsuite/ld-x86-64/ilp32-3.d
+++ b/ld/testsuite/ld-x86-64/ilp32-3.d
@@ -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
diff --git a/ld/testsuite/ld-x86-64/lp64-2.d b/ld/testsuite/ld-x86-64/lp64-2.d
index fde3202..7515881 100644
--- a/ld/testsuite/ld-x86-64/lp64-2.d
+++ b/ld/testsuite/ld-x86-64/lp64-2.d
@@ -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
diff --git a/ld/testsuite/ld-x86-64/lp64-3.d b/ld/testsuite/ld-x86-64/lp64-3.d
index c89fbc4..e60efeb 100644
--- a/ld/testsuite/ld-x86-64/lp64-3.d
+++ b/ld/testsuite/ld-x86-64/lp64-3.d
@@ -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
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
index 0fd0312..8ca2da7 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -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"