Don't check relocation if input ELF object ID doesn't match output.
authorH.J. Lu <hjl.tools@gmail.com>
Sun, 22 Aug 2010 19:14:25 +0000 (19:14 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Sun, 22 Aug 2010 19:14:25 +0000 (19:14 +0000)
bfd/

2010-08-22  H.J. Lu  <hongjiu.lu@intel.com>

PR ld/11933
* elflink.c (elf_link_add_object_symbols): Don't check relocation
if input ELF object ID doesn't match output.

ld/testsuite/

2010-08-22  H.J. Lu  <hongjiu.lu@intel.com>

PR ld/11933
* ld-x86-64/mixed1a.s: New.
* ld-x86-64/mixed1b.s: Likewise.
* ld-x86-64/mixed2a.s: Likewise.
* ld-x86-64/mixed2b.s: Likewise.

* ld-x86-64/x86-64.exp: Text mixed x86_64 and i386 inputs.

bfd/ChangeLog
bfd/elflink.c
ld/testsuite/ChangeLog
ld/testsuite/ld-x86-64/mixed1a.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/mixed1b.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/mixed2a.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/mixed2b.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/x86-64.exp

index ee2722940061a1da5d2f795e210277baeefa14b0..7ae83002a1b6b246d7004a054ad3a73df335edf1 100644 (file)
@@ -1,3 +1,9 @@
+2010-08-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/11933
+       * elflink.c (elf_link_add_object_symbols): Don't check relocation
+       if input ELF object ID doesn't match output.
+
 2010-08-21  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
        * configure: Regenerate.
index 074229f7ccb9ead11cb85d2cb637fee59e176a37..2f67c4769affa696b1d59c8ec423b6e6278f958e 100644 (file)
@@ -4791,6 +4791,7 @@ error_free_dyn:
   if (! dynamic
       && is_elf_hash_table (htab)
       && bed->check_relocs != NULL
+      && elf_object_id (abfd) == elf_hash_table_id (htab)
       && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
     {
       asection *o;
index 5a7bff8fad0e0ab64b8f2caf7aa90bd5ec0edd50..df69b375690e0ae1378d97b795e4db7ba35c8d59 100644 (file)
@@ -1,3 +1,13 @@
+2010-08-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/11933
+       * ld-x86-64/mixed1a.s: New.
+       * ld-x86-64/mixed1b.s: Likewise.
+       * ld-x86-64/mixed2a.s: Likewise.
+       * ld-x86-64/mixed2b.s: Likewise.
+
+       * ld-x86-64/x86-64.exp: Text mixed x86_64 and i386 inputs.
+
 2010-08-20  Maciej W. Rozycki  <macro@codesourcery.com>
 
        * ld-sh/sh.exp: Add missing newline.
diff --git a/ld/testsuite/ld-x86-64/mixed1a.s b/ld/testsuite/ld-x86-64/mixed1a.s
new file mode 100644 (file)
index 0000000..07e0ae8
--- /dev/null
@@ -0,0 +1,6 @@
+       .text
+.globl _start
+       .type   _start, @function
+_start:
+       cmpq    $0, foo(%rip)
+       .size   _start, .-_start
diff --git a/ld/testsuite/ld-x86-64/mixed1b.s b/ld/testsuite/ld-x86-64/mixed1b.s
new file mode 100644 (file)
index 0000000..66bb38f
--- /dev/null
@@ -0,0 +1,10 @@
+.globl foo
+       .section        .rodata.str1.1,"aMS",@progbits,1
+.LC0:
+       .string "Hello"
+       .data
+       .align 4
+       .type   foo, @object
+       .size   foo, 4
+foo:
+       .long   .LC0
diff --git a/ld/testsuite/ld-x86-64/mixed2a.s b/ld/testsuite/ld-x86-64/mixed2a.s
new file mode 100644 (file)
index 0000000..a597bb3
--- /dev/null
@@ -0,0 +1,7 @@
+       .text
+       .p2align 4,,15
+.globl _start
+       .type   _start, @function
+_start:
+       movl    foo(%rip), %eax
+       .size   _start, .-_start
diff --git a/ld/testsuite/ld-x86-64/mixed2b.s b/ld/testsuite/ld-x86-64/mixed2b.s
new file mode 100644 (file)
index 0000000..3cac801
--- /dev/null
@@ -0,0 +1,7 @@
+.globl foo
+       .data
+       .align 4
+       .type   foo, @object
+       .size   foo, 4
+foo:
+       .long   1
index ed5d8dce3086b908338cfb9854fce94476945bc2..f5d1b0bcbb216c97d655aabc5539d33f11659c38 100644 (file)
@@ -75,10 +75,41 @@ set x86_64tests {
     {"TLS IE->LE transition" "-melf_x86_64"
      "--64" {tlsie1.s}
      {{objdump -dwr tlsie1.dd}} "tlsie1"}
+    {"Helper 64bit object 1" "-r -melf_x86_64"
+     "--64" {mixed1a.s} {} "libmixe1a.o"}
+    {"Helper 32bit object 1" "-r -melf_i386"
+     "--32" {mixed1b.s} {} "libmixe1b.o"}
+    {"Helper 64bit object 2" "-r -melf_x86_64"
+     "--64" {mixed2a.s} {} "libmixe2a.o"}
+    {"Helper 32bit object 2" "-r -melf_i386"
+     "--32" {mixed2b.s} {} "libmixe2b.o"}
 }
 
 run_ld_link_tests $x86_64tests
 
+global link_output
+global ld
+
+set test_namename "Mixed x86_64 and i386 input test 1"
+set test mixed1
+if { ![ld_simple_link $ld tmpdir/$test "-melf_x86_64 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] {
+       pass "$test_name" 
+    } {
+       fail "$test_name" 
+    }
+}
+
+set test_namename "Mixed x86_64 and i386 input test 2"
+set test mixed2
+if { ![ld_simple_link $ld tmpdir/$test "-melf_x86_64 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] {
+       pass "$test_name" 
+    } {
+       fail "$test_name" 
+    }
+}
+
 run_dump_test "abs"
 run_dump_test "abs-l1om"
 run_dump_test "pcrel8"