* 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.
This commit is contained in:
Roland McGrath 2013-08-26 22:18:07 +00:00
parent 887badb310
commit 1098fd41ac
16 changed files with 116 additions and 12 deletions

View 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

View 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)

View 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)

View 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 =

View 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

View 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.

View 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.

View 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.

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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"