diff --git a/bfd/ChangeLog b/bfd/ChangeLog index d00fd0663d..a8373ff3e2 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2012-01-10 H.J. Lu + + PR ld/13581 + * elf64-x86-64.c (elf_x86_64_relocate_section): Remove ABI_64_P + check on R_X86_64_PCXX. + 2012-01-10 Tristan Gingold * mach-o.c (bfd_mach_o_build_commands): Avoid uninitialized false diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 25c14a8ad5..814736e221 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -3472,7 +3472,6 @@ elf_x86_64_relocate_section (bfd *output_bfd, case R_X86_64_PC16: case R_X86_64_PC32: if (info->shared - && ABI_64_P (output_bfd) && (input_section->flags & SEC_ALLOC) != 0 && (input_section->flags & SEC_READONLY) != 0 && h != NULL) diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 655919ac4c..e7225dc53b 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,16 @@ +2012-01-10 H.J. Lu + + PR ld/13581 + * ld-x86-64/ilp32-4.s: New. + * ld-x86-64/ilp32-10.d: Likewise. + * ld-x86-64/ilp32-10.s: Likewise. + + * ld-x86-64/ilp32-4.d: Adjusted. + * ld-x86-64/ilp32-5.d: Likewise. + * ld-x86-64/ilp32-5.s: Likewise. + + * ld-x86-64/x86-64.exp: Run ilp32-10. + 2012-01-05 Nick Clifton * ld-x86-64/x86-64.exp: Add test of linking mixed 32-bit and diff --git a/ld/testsuite/ld-x86-64/ilp32-10.d b/ld/testsuite/ld-x86-64/ilp32-10.d new file mode 100644 index 0000000000..43d9fbd429 --- /dev/null +++ b/ld/testsuite/ld-x86-64/ilp32-10.d @@ -0,0 +1,3 @@ +#as: --x32 +#ld: -shared -melf32_x86_64 +#error: .*relocation R_X86_64_PC32 against undefined symbol `bar' can not be used when making a shared object; recompile with -fPIC diff --git a/ld/testsuite/ld-x86-64/ilp32-10.s b/ld/testsuite/ld-x86-64/ilp32-10.s new file mode 100644 index 0000000000..70e4a90886 --- /dev/null +++ b/ld/testsuite/ld-x86-64/ilp32-10.s @@ -0,0 +1,3 @@ + .globl foo +foo: + mov bar(%rip), %rax diff --git a/ld/testsuite/ld-x86-64/ilp32-4.d b/ld/testsuite/ld-x86-64/ilp32-4.d index 84dc7b250e..92d8a67e7b 100644 --- a/ld/testsuite/ld-x86-64/ilp32-4.d +++ b/ld/testsuite/ld-x86-64/ilp32-4.d @@ -1,36 +1,30 @@ -#source: start.s #as: --x32 #ld: -m elf32_x86_64 -shared --no-ld-generated-unwind-info #readelf: -d -S --wide -There are 10 section headers, starting at offset 0x22c: +There are 9 section headers, starting at offset 0x1d8: Section Headers: \[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al \[ 0\] NULL 00000000 000000 000000 00 0 0 0 - \[ 1\] .hash HASH 00000094 000094 000030 04 A 2 0 4 - \[ 2\] .dynsym DYNSYM 000000c4 0000c4 000070 10 A 3 2 4 - \[ 3\] .dynstr STRTAB 00000134 000134 00001d 00 A 0 0 1 - \[ 4\] .rela.dyn RELA 00000154 000154 00000c 0c A 2 0 4 - \[ 5\] .text PROGBITS 00000160 000160 000005 00 AX 0 0 4 - \[ 6\] .dynamic DYNAMIC 00200168 000168 000078 08 WA 3 0 4 - \[ 7\] .shstrtab STRTAB 00000000 0001e0 00004a 00 0 0 1 - \[ 8\] .symtab SYMTAB 00000000 0003bc 0000e0 10 9 9 4 - \[ 9\] .strtab STRTAB 00000000 00049c 000043 00 0 0 1 + \[ 1\] .hash HASH 00000094 000094 00002c 04 A 2 0 4 + \[ 2\] .dynsym DYNSYM 000000c0 0000c0 000060 10 A 3 2 4 + \[ 3\] .dynstr STRTAB 00000120 000120 000019 00 A 0 0 1 + \[ 4\] .text PROGBITS 0000013c 00013c 000001 00 AX 0 0 4 + \[ 5\] .dynamic DYNAMIC 00200140 000140 000058 08 WA 3 0 4 + \[ 6\] .shstrtab STRTAB 00000000 000198 000040 00 0 0 1 + \[ 7\] .symtab SYMTAB 00000000 000340 0000c0 10 8 8 4 + \[ 8\] .strtab STRTAB 00000000 000400 00003f 00 0 0 1 Key to Flags: W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\), l \(large\) I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\) O \(extra OS processing required\) o \(OS specific\), p \(processor specific\) -Dynamic section at offset 0x168 contains 10 entries: +Dynamic section at offset 0x140 contains 6 entries: Tag Type Name/Value 0x00000004 \(HASH\) 0x94 - 0x00000005 \(STRTAB\) 0x134 - 0x00000006 \(SYMTAB\) 0xc4 - 0x0000000a \(STRSZ\) 29 \(bytes\) + 0x00000005 \(STRTAB\) 0x120 + 0x00000006 \(SYMTAB\) 0xc0 + 0x0000000a \(STRSZ\) 25 \(bytes\) 0x0000000b \(SYMENT\) 16 \(bytes\) - 0x00000007 \(RELA\) 0x154 - 0x00000008 \(RELASZ\) 12 \(bytes\) - 0x00000009 \(RELAENT\) 12 \(bytes\) - 0x00000016 \(TEXTREL\) 0x0 0x00000000 \(NULL\) 0x0 diff --git a/ld/testsuite/ld-x86-64/ilp32-4.s b/ld/testsuite/ld-x86-64/ilp32-4.s new file mode 100644 index 0000000000..5f270c7416 --- /dev/null +++ b/ld/testsuite/ld-x86-64/ilp32-4.s @@ -0,0 +1,3 @@ + .globl _start +_start: + ret diff --git a/ld/testsuite/ld-x86-64/ilp32-5.d b/ld/testsuite/ld-x86-64/ilp32-5.d index e4673e52b2..4870c2b518 100644 --- a/ld/testsuite/ld-x86-64/ilp32-5.d +++ b/ld/testsuite/ld-x86-64/ilp32-5.d @@ -4,5 +4,5 @@ #... [0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[0-9a-f]+ -[0-9a-f]+ +[0-9a-f]+ +R_X86_64_PC32 +[0-9a-f]+ +foo - 4 +[0-9a-f]+ +[0-9a-f]+ +R_X86_64_GLOB_DAT +[0-9a-f]+ +foo \+ 0 [0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +[0-9a-f]+ +foo \+ 0 diff --git a/ld/testsuite/ld-x86-64/ilp32-5.s b/ld/testsuite/ld-x86-64/ilp32-5.s index 0d97807395..ef0c60e3a0 100644 --- a/ld/testsuite/ld-x86-64/ilp32-5.s +++ b/ld/testsuite/ld-x86-64/ilp32-5.s @@ -1,6 +1,6 @@ .globl bar bar: - mov foo(%rip), %rax + mov foo@GOTPCREL(%rip), %rax .data xxx: diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp index e493278694..f713ca51a1 100644 --- a/ld/testsuite/ld-x86-64/x86-64.exp +++ b/ld/testsuite/ld-x86-64/x86-64.exp @@ -211,6 +211,7 @@ run_dump_test "ilp32-6" run_dump_test "ilp32-7" run_dump_test "ilp32-8" run_dump_test "ilp32-9" +run_dump_test "ilp32-10" run_dump_test "ia32-1" run_dump_test "ia32-2" run_dump_test "ia32-3"