Don't allow mixing x64_32 with x86_64.

bfd/

2011-01-03  H.J. Lu  <hongjiu.lu@intel.com>

	* cpu-i386.c (bfd_i386_compatible): New.
	(bfd_x64_32_arch_intel_syntax): Replace bfd_default_compatible
	with bfd_i386_compatible.
	(bfd_x86_64_arch_intel_syntax): Likewise.
	(bfd_i386_arch_intel_syntax): Likewise.
	(i8086_arch): Likewise.
	(bfd_x64_32_arch): Likewise.
	(bfd_x86_64_arch): Likewise.
	(bfd_i386_arch): Likewise.

ld/testsuite/

2011-01-03  H.J. Lu  <hongjiu.lu@intel.com>

	* ld-x86-64/dummy.s: New.
	* ld-x86-64/foo.s: Likewise.
	* ld-x86-64/ia32-1.d: Likewise.
	* ld-x86-64/ia32-2.d: Likewise.
	* ld-x86-64/ia32-3.d: Likewise.
	* ld-x86-64/ilp32-1.d: Likewise.
	* ld-x86-64/ilp32-2.d: Likewise.
	* ld-x86-64/ilp32-3.d: Likewise.
	* ld-x86-64/lp64-1.d: Likewise.
	* ld-x86-64/lp64-2.d: Likewise.
	* ld-x86-64/lp64-3.d: Likewise.
	* ld-x86-64/start.s: Likewise.

	* ld-x86-64/x86-64.exp: Run ilp32-1, ilp32-2, ilp32-3, ia32-1,
	ia32-2, ia32-3, lp64-1, lp64-2 and lp64-3.
This commit is contained in:
H.J. Lu 2011-01-03 18:16:46 +00:00
parent 47a50e5b13
commit 889a4d3e74
16 changed files with 171 additions and 9 deletions

View file

@ -1,3 +1,15 @@
2011-01-03 H.J. Lu <hongjiu.lu@intel.com>
* cpu-i386.c (bfd_i386_compatible): New.
(bfd_x64_32_arch_intel_syntax): Replace bfd_default_compatible
with bfd_i386_compatible.
(bfd_x86_64_arch_intel_syntax): Likewise.
(bfd_i386_arch_intel_syntax): Likewise.
(i8086_arch): Likewise.
(bfd_x64_32_arch): Likewise.
(bfd_x86_64_arch): Likewise.
(bfd_i386_arch): Likewise.
For older changes see ChangeLog-2010 For older changes see ChangeLog-2010
Local Variables: Local Variables:

View file

@ -1,6 +1,6 @@
/* BFD support for the Intel 386 architecture. /* BFD support for the Intel 386 architecture.
Copyright 1992, 1994, 1995, 1996, 1998, 2000, 2001, 2002, 2004, 2005, Copyright 1992, 1994, 1995, 1996, 1998, 2000, 2001, 2002, 2004, 2005,
2007, 2009 2007, 2009, 2010, 2011
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library. This file is part of BFD, the Binary File Descriptor library.
@ -24,6 +24,19 @@
#include "bfd.h" #include "bfd.h"
#include "libbfd.h" #include "libbfd.h"
static const bfd_arch_info_type *
bfd_i386_compatible (const bfd_arch_info_type *a,
const bfd_arch_info_type *b)
{
const bfd_arch_info_type *compat = bfd_default_compatible (a, b);
/* Don't allow mixing x64_32 with x86_64. */
if (compat && a->bits_per_address != b->bits_per_address)
compat = NULL;
return compat;
}
static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax = static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax =
{ {
64, /* 64 bits in a word */ 64, /* 64 bits in a word */
@ -35,7 +48,7 @@ static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax =
"i386:x64-32:intel", "i386:x64-32:intel",
3, 3,
FALSE, FALSE,
bfd_default_compatible, bfd_i386_compatible,
bfd_default_scan, bfd_default_scan,
0 0
}; };
@ -51,7 +64,7 @@ static const bfd_arch_info_type bfd_x86_64_arch_intel_syntax =
"i386:x86-64:intel", "i386:x86-64:intel",
3, 3,
FALSE, FALSE,
bfd_default_compatible, bfd_i386_compatible,
bfd_default_scan, bfd_default_scan,
&bfd_x64_32_arch_intel_syntax, &bfd_x64_32_arch_intel_syntax,
}; };
@ -67,7 +80,7 @@ static const bfd_arch_info_type bfd_i386_arch_intel_syntax =
"i386:intel", "i386:intel",
3, 3,
TRUE, TRUE,
bfd_default_compatible, bfd_i386_compatible,
bfd_default_scan, bfd_default_scan,
&bfd_x86_64_arch_intel_syntax &bfd_x86_64_arch_intel_syntax
}; };
@ -83,7 +96,7 @@ static const bfd_arch_info_type i8086_arch =
"i8086", "i8086",
3, 3,
FALSE, FALSE,
bfd_default_compatible, bfd_i386_compatible,
bfd_default_scan, bfd_default_scan,
&bfd_i386_arch_intel_syntax &bfd_i386_arch_intel_syntax
}; };
@ -99,7 +112,7 @@ static const bfd_arch_info_type bfd_x64_32_arch =
"i386:x64-32", "i386:x64-32",
3, 3,
FALSE, FALSE,
bfd_default_compatible, bfd_i386_compatible,
bfd_default_scan, bfd_default_scan,
&i8086_arch &i8086_arch
}; };
@ -115,7 +128,7 @@ static const bfd_arch_info_type bfd_x86_64_arch =
"i386:x86-64", "i386:x86-64",
3, 3,
FALSE, FALSE,
bfd_default_compatible, bfd_i386_compatible,
bfd_default_scan, bfd_default_scan,
&bfd_x64_32_arch &bfd_x64_32_arch
}; };
@ -131,7 +144,7 @@ const bfd_arch_info_type bfd_i386_arch =
"i386", "i386",
3, 3,
TRUE, TRUE,
bfd_default_compatible, bfd_i386_compatible,
bfd_default_scan, bfd_default_scan,
&bfd_x86_64_arch &bfd_x86_64_arch
}; };

View file

@ -1,3 +1,21 @@
2011-01-03 H.J. Lu <hongjiu.lu@intel.com>
* ld-x86-64/dummy.s: New.
* ld-x86-64/foo.s: Likewise.
* ld-x86-64/ia32-1.d: Likewise.
* ld-x86-64/ia32-2.d: Likewise.
* ld-x86-64/ia32-3.d: Likewise.
* ld-x86-64/ilp32-1.d: Likewise.
* ld-x86-64/ilp32-2.d: Likewise.
* ld-x86-64/ilp32-3.d: Likewise.
* ld-x86-64/lp64-1.d: Likewise.
* ld-x86-64/lp64-2.d: Likewise.
* ld-x86-64/lp64-3.d: Likewise.
* ld-x86-64/start.s: Likewise.
* ld-x86-64/x86-64.exp: Run ilp32-1, ilp32-2, ilp32-3, ia32-1,
ia32-2, ia32-3, lp64-1, lp64-2 and lp64-3.
2011-01-02 H.J. Lu <hongjiu.lu@intel.com> 2011-01-02 H.J. Lu <hongjiu.lu@intel.com>
PR ld/12001 PR ld/12001

View file

@ -0,0 +1 @@
# Dummy

View file

@ -0,0 +1,3 @@
.globl foo
foo:
mov %eax, %ebx

View file

@ -0,0 +1,16 @@
#source: dummy.s
#as: --32
#ld: -m elf_i386 tmpdir/start32.o tmpdir/foo32.o
#readelf: -h
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 \(current\)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC \(Executable file\)
Machine: Intel 80386
Version: 0x1
#pass

View file

@ -0,0 +1,4 @@
#source: dummy.s
#as: --32
#ld: -m elf_i386 tmpdir/start32.o tmpdir/foon32.o
#error: .*i386:x64-32 architecture of input file `tmpdir/foon32.o' is incompatible with i386 output

View file

@ -0,0 +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

View file

@ -0,0 +1,16 @@
#source: dummy.s
#as: --n32
#ld: -m elf32_x86_64 tmpdir/startn32.o tmpdir/foon32.o
#readelf: -h
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 \(current\)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC \(Executable file\)
Machine: Advanced Micro Devices X86-64
Version: 0x1
#pass

View file

@ -0,0 +1,4 @@
#source: dummy.s
#as: --n32
#ld: -m elf32_x86_64 tmpdir/startn32.o tmpdir/foo32.o
#error: .*i386 architecture of input file `tmpdir/foo32.o' is incompatible with i386:x64-32 output

View file

@ -0,0 +1,4 @@
#source: dummy.s
#as: --n32
#ld: -m elf32_x86_64 tmpdir/startn32.o tmpdir/foo64.o
#error: .*i386:x86-64 architecture of input file `tmpdir/foo64.o' is incompatible with i386:x64-32 output

View file

@ -0,0 +1,16 @@
#source: dummy.s
#as: --64
#ld: -m elf_x86_64 tmpdir/start64.o tmpdir/foo64.o
#readelf: -h
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 \(current\)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC \(Executable file\)
Machine: Advanced Micro Devices X86-64
Version: 0x1
#pass

View file

@ -0,0 +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

View file

@ -0,0 +1,4 @@
#source: dummy.s
#as: --64
#ld: -m elf_x86_64 tmpdir/start64.o tmpdir/foon32.o
#error: .*i386:x64-32 architecture of input file `tmpdir/foon32.o' is incompatible with i386:x86-64 output

View file

@ -0,0 +1,3 @@
.globl _start
_start:
jmp foo

View file

@ -1,5 +1,6 @@
# Expect script for ld-x86_64 tests # Expect script for ld-x86_64 tests
# Copyright (C) 2002, 2005, 2006, 2007, 2008, 2009 Free Software Foundation # Copyright (C) 2002, 2005, 2006, 2007, 2008, 2009, 2010, 2011
# Free Software Foundation
# #
# This file is part of the GNU Binutils. # This file is part of the GNU Binutils.
# #
@ -140,4 +141,43 @@ if { ![istarget "x86_64-*-linux*"] } {
return return
} }
if ![ld_assemble $as "--n32 $srcdir/$subdir/start.s" tmpdir/startn32.o] {
unresolved "Build ILP32 start.o"
return
}
if ![ld_assemble $as "--32 $srcdir/$subdir/start.s" tmpdir/start32.o] {
unresolved "Build ia32 start.o"
return
}
if ![ld_assemble $as "--64 $srcdir/$subdir/start.s" tmpdir/start64.o] {
unresolved "Build LP64 start.o"
return
}
if ![ld_assemble $as "--n32 $srcdir/$subdir/foo.s" tmpdir/foon32.o] {
unresolved "Build ILP32 foo.o"
return
}
if ![ld_assemble $as "--32 $srcdir/$subdir/foo.s" tmpdir/foo32.o] {
unresolved "Build ia32 foo.o"
return
}
if ![ld_assemble $as "--64 $srcdir/$subdir/foo.s" tmpdir/foo64.o] {
unresolved "Build LP64 foo.o"
return
}
run_dump_test "compressed1" run_dump_test "compressed1"
run_dump_test "ilp32-1"
run_dump_test "ilp32-2"
run_dump_test "ilp32-3"
run_dump_test "ia32-1"
run_dump_test "ia32-2"
run_dump_test "ia32-3"
run_dump_test "lp64-1"
run_dump_test "lp64-2"
run_dump_test "lp64-3"