Not linking 32-bit and 64-bit objects
Andreas Jaeger
aj@suse.de
Tue Mar 12 04:20:00 GMT 2002
Alan Modra <amodra@bigpond.net.au> writes:
> On Tue, Mar 12, 2002 at 12:05:47PM +0100, Andreas Jaeger wrote:
>>
>> If I try to link a 32-bit i386 object as 64-bit x86-64 object, it
>> should fail but I'd like to see a better error message.
>
> I think you're probably better off writing a replacement for
> bfd_default_compatible in bfd/cpu-i386.c
Thanks for the hint!
Now I get this:
gee:~/tmp:[1]$ /opt/x86-64/bin/x86_64-unknown-linux-gcc k.o
/opt/x86-64/lib/gcc-lib/x86_64-unknown-linux/3.1/../../../../x86_64-unknown-linux/bin/ld: skipping incompatible /opt/x86-64/lib/gcc-lib/x86_64-unknown-linux/3.1/libgcc.a when searching for -lgcc
/opt/x86-64/lib/gcc-lib/x86_64-unknown-linux/3.1/../../../../x86_64-unknown-linux/bin/ld: cannot find -lgcc
collect2: ld returned 1 exit status
And I'm happy with it ;-)
Ok to commit?
Andreas
2002-03-12 Andreas Jaeger <aj@suse.de>
* cpu-i386.c (i386_compatible): New. Use it instead of
bfd_default_compatible.
Index: bfd/cpu-i386.c
===================================================================
RCS file: /cvs/src/src/bfd/cpu-i386.c,v
retrieving revision 1.6
diff -u -p -r1.6 cpu-i386.c
--- cpu-i386.c 2001/11/14 12:01:58 1.6
+++ cpu-i386.c 2002/03/12 12:19:56
@@ -1,5 +1,5 @@
/* BFD support for the Intel 386 architecture.
- Copyright 1992, 1994, 1995, 1996, 1998, 2000, 2001
+ Copyright 1992, 1994, 1995, 1996, 1998, 2000, 2001, 2002
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -22,6 +22,22 @@ Foundation, Inc., 59 Temple Place - Suit
#include "sysdep.h"
#include "libbfd.h"
+/* Don't mix 32 bit and 64 bit files. */
+
+static const bfd_arch_info_type *i386_compatible
+ PARAMS ((const bfd_arch_info_type *, const bfd_arch_info_type *));
+
+static const bfd_arch_info_type *
+i386_compatible (a, b)
+ const bfd_arch_info_type *a;
+ const bfd_arch_info_type *b;
+{
+ if (a->bits_per_word != b->bits_per_word)
+ return NULL;
+
+ return bfd_default_compatible (a, b);
+}
+
const bfd_arch_info_type bfd_i386_arch_intel_syntax =
{
32, /* 32 bits in a word */
@@ -33,7 +49,7 @@ const bfd_arch_info_type bfd_i386_arch_i
"i386:intel",
3,
true,
- bfd_default_compatible,
+ i386_compatible,
bfd_default_scan ,
0,
};
@@ -48,7 +64,7 @@ const bfd_arch_info_type bfd_x86_64_arch
"x86-64:intel",
3,
true,
- bfd_default_compatible,
+ i386_compatible,
bfd_default_scan ,
&bfd_i386_arch_intel_syntax,
};
@@ -63,7 +79,7 @@ static const bfd_arch_info_type i8086_ar
"i8086",
3,
false,
- bfd_default_compatible,
+ i386_compatible,
bfd_default_scan ,
&bfd_x86_64_arch_intel_syntax,
};
@@ -79,7 +95,7 @@ const bfd_arch_info_type bfd_x86_64_arch
"x86-64",
3,
true,
- bfd_default_compatible,
+ i386_compatible,
bfd_default_scan ,
&i8086_arch,
};
@@ -95,7 +111,7 @@ const bfd_arch_info_type bfd_i386_arch =
"i386",
3,
true,
- bfd_default_compatible,
+ i386_compatible,
bfd_default_scan ,
&bfd_x86_64_arch
};
--
Andreas Jaeger
SuSE Labs aj@suse.de
private aj@arthur.inka.de
http://www.suse.de/~aj
More information about the Binutils
mailing list