* ld-x86-64/x86-64.exp: Add test of linking mixed 32-bit and
authorNick Clifton <nickc@redhat.com>
Thu, 5 Jan 2012 15:17:18 +0000 (15:17 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 5 Jan 2012 15:17:18 +0000 (15:17 +0000)
64-bit objects when the 32-bit object (loaded first) contains 32+
local symbols, all referenced by relocs and the 64-bit object
contains a reloc that uses a symbol in the 32-bit object.
* 32bit.s: New source file.
* 64bit.s: New source file.
* incompatible.l: New expected linker output file.

ld/testsuite/ChangeLog
ld/testsuite/ld-x86-64/32bit.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/64bit.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/incompatible.l [new file with mode: 0644]
ld/testsuite/ld-x86-64/x86-64.exp

index 555390b..655919a 100644 (file)
@@ -1,3 +1,12 @@
+2012-01-05  Nick Clifton  <nickc@redhat.com>
+
+       * ld-x86-64/x86-64.exp: Add test of linking mixed 32-bit and
+       64-bit objects when the 32-bit object (loaded first) contains 32+
+       local symbols, all referenced by relocs and the 64-bit object
+       contains a reloc that uses a symbol in the 32-bit object.
+       * 32bit.s: New source file.
+       * 64bit.s: New source file.
+       * incompatible.l: New expected linker output file.
 
 For older changes see ChangeLog-2011
 \f
diff --git a/ld/testsuite/ld-x86-64/32bit.s b/ld/testsuite/ld-x86-64/32bit.s
new file mode 100644 (file)
index 0000000..2547a8b
--- /dev/null
@@ -0,0 +1,78 @@
+
+       .section        .rodata.str1.1,"aMS",@progbits,1
+
+.LC0:  .word 1
+.LC1:  .word 2
+.LC2:  .word 3
+.LC3:  .word 4
+.LC4:  .word 5
+.LC5:  .word 6
+.LC6:  .word 7
+.LC7:  .word 8
+.LC8:  .word 9
+.LC9:  .word 10
+.LC10: .word 11
+.LC11: .word 12
+.LC12: .word 13
+.LC13: .word 14
+.LC14: .word 15
+.LC15: .word 16
+.LC16: .word 17
+.LC17: .word 18
+.LC18: .word 19
+.LC19: .word 20
+.LC20: .word 21
+.LC21: .word 22
+.LC22: .word 23
+.LC23: .word 24
+.LC24: .word 25
+.LC25: .word 26
+.LC26: .word 27
+.LC27: .word 28
+.LC28: .word 29
+.LC29: .word 30
+.LC30: .word 31
+.LC31: .word 32
+.LC32: .word 33
+.LC33: .word 34
+
+       .text
+       .p2align 4,,15
+       .globl  foo
+       .type   foo, @function
+foo:
+
+       leal    .LC0@GOTOFF(%ecx), %eax
+       leal    .LC1@GOTOFF(%ecx), %eax
+       leal    .LC2@GOTOFF(%ecx), %eax
+       leal    .LC3@GOTOFF(%ecx), %eax
+       leal    .LC4@GOTOFF(%ecx), %eax
+       leal    .LC5@GOTOFF(%ecx), %eax
+       leal    .LC6@GOTOFF(%ecx), %eax
+       leal    .LC7@GOTOFF(%ecx), %eax
+       leal    .LC8@GOTOFF(%ecx), %eax
+       leal    .LC9@GOTOFF(%ecx), %eax
+       leal    .LC10@GOTOFF(%ecx), %eax
+       leal    .LC11@GOTOFF(%ecx), %eax
+       leal    .LC12@GOTOFF(%ecx), %eax
+       leal    .LC13@GOTOFF(%ecx), %eax
+       leal    .LC14@GOTOFF(%ecx), %eax
+       leal    .LC15@GOTOFF(%ecx), %eax
+       leal    .LC16@GOTOFF(%ecx), %eax
+       leal    .LC17@GOTOFF(%ecx), %eax
+       leal    .LC18@GOTOFF(%ecx), %eax
+       leal    .LC19@GOTOFF(%ecx), %eax
+       leal    .LC20@GOTOFF(%ecx), %eax
+       leal    .LC21@GOTOFF(%ecx), %eax
+       leal    .LC22@GOTOFF(%ecx), %eax
+       leal    .LC23@GOTOFF(%ecx), %eax
+       leal    .LC24@GOTOFF(%ecx), %eax
+       leal    .LC25@GOTOFF(%ecx), %eax
+       leal    .LC26@GOTOFF(%ecx), %eax
+       leal    .LC27@GOTOFF(%ecx), %eax
+       leal    .LC28@GOTOFF(%ecx), %eax
+       leal    .LC29@GOTOFF(%ecx), %eax
+       leal    .LC30@GOTOFF(%ecx), %eax
+       leal    .LC31@GOTOFF(%ecx), %eax
+       leal    .LC32@GOTOFF(%ecx), %eax
+       leal    .LC33@GOTOFF(%ecx), %eax
diff --git a/ld/testsuite/ld-x86-64/64bit.s b/ld/testsuite/ld-x86-64/64bit.s
new file mode 100644 (file)
index 0000000..3e741f7
--- /dev/null
@@ -0,0 +1,4 @@
+       .text
+bar:
+       call foo
+
diff --git a/ld/testsuite/ld-x86-64/incompatible.l b/ld/testsuite/ld-x86-64/incompatible.l
new file mode 100644 (file)
index 0000000..2f55de1
--- /dev/null
@@ -0,0 +1 @@
+.*incompatible.*
index 77b081b..e493278 100644 (file)
@@ -111,6 +111,10 @@ set x86_64tests {
     {"TLS X32 LD->LE transition" "-melf32_x86_64"
      "--x32" {tlsld2.s}
      {{objdump -dwr tlsld2.dd}} "tlsld2"}
+     {"build 32-bit object with 33 locals" "-e 0" "--32" {32bit.s} {{ ld incompatible.l }} "dummy" }
+     {"build 64-bit object" "-e 0 --defsym foo=1" "--64" {64bit.s} {} "dummy" }
+     {"link mixed objects"  "-e 0 tmpdir/32bit.o tmpdir/64bit.o" "" {} { { ld incompatible.l } } "mixed"}
 }
 
 run_ld_link_tests $x86_64tests