Use .got.plt for IFUNC symbols if there are no GOT relocations.
bfd/ 2011-09-12 H.J. Lu <hongjiu.lu@intel.com> PR ld/13178 * elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Use .got.plt if there are no GOT relocations. ld/testsuite/ 2011-09-12 H.J. Lu <hongjiu.lu@intel.com> PR ld/13178 * ld-ifunc/ifunc-13-i386.d: Updated. * ld-ifunc/ifunc-13-x86-64.d: Likewise. * ld-ifunc/ifunc-3a-x86.d: Likewise. * ld-x86-64/pr13082-5a.d: Likewise. * ld-ifunc/ifunc-15-i386.d: New. * ld-ifunc/ifunc-15-i386.s: Likewise. * ld-ifunc/ifunc-15-x86-64.d: Likewise. * ld-ifunc/ifunc-15-x86-64.s: Likewise.
This commit is contained in:
parent
24ece742a0
commit
7b5b197e80
@ -1,3 +1,9 @@
|
||||
2011-09-12 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/13178
|
||||
* elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Use .got.plt
|
||||
if there are no GOT relocations.
|
||||
|
||||
2011-09-09 Kai Tietz <ktietz@redhat.com>
|
||||
|
||||
* peicode.h (pe_ILF_build_a_bfd): Don't remove leading underscore
|
||||
|
@ -299,9 +299,10 @@ keep:
|
||||
5. Otherwise use .got so that it can be shared among different
|
||||
objects at run-time.
|
||||
We only need to relocate .got entry in shared object. */
|
||||
if ((info->shared
|
||||
&& (h->dynindx == -1
|
||||
|| h->forced_local))
|
||||
if (h->got.refcount <= 0
|
||||
|| (info->shared
|
||||
&& (h->dynindx == -1
|
||||
|| h->forced_local))
|
||||
|| (!info->shared
|
||||
&& !h->pointer_equality_needed)
|
||||
|| (info->executable && info->shared)
|
||||
|
@ -1,3 +1,16 @@
|
||||
2011-09-12 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/13178
|
||||
* ld-ifunc/ifunc-13-i386.d: Updated.
|
||||
* ld-ifunc/ifunc-13-x86-64.d: Likewise.
|
||||
* ld-ifunc/ifunc-3a-x86.d: Likewise.
|
||||
* ld-x86-64/pr13082-5a.d: Likewise.
|
||||
|
||||
* ld-ifunc/ifunc-15-i386.d: New.
|
||||
* ld-ifunc/ifunc-15-i386.s: Likewise.
|
||||
* ld-ifunc/ifunc-15-x86-64.d: Likewise.
|
||||
* ld-ifunc/ifunc-15-x86-64.s: Likewise.
|
||||
|
||||
2011-09-01 Christophe Lyon <christophe.lyon@st.com>
|
||||
|
||||
* ld-arm/arm-elf.exp: Add new rodata-merge-map test.
|
||||
|
@ -5,15 +5,14 @@
|
||||
#readelf: -r --wide
|
||||
#target: x86_64-*-* i?86-*-*
|
||||
|
||||
Relocation section '.rel.got' at .*
|
||||
Relocation section '.rel.got' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||
[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
|
||||
#...
|
||||
[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_GLOB_DAT[ ]+ifunc\(\)[ ]+ifunc
|
||||
#...
|
||||
Relocation section '.rel.ifunc' at .*
|
||||
[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_RELATIVE[ ]+
|
||||
|
||||
Relocation section '.rel.ifunc' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||
[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
|
||||
[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_32[ ]+ifunc\(\)[ ]+ifunc
|
||||
#...
|
||||
Relocation section '.rel.plt' at .*
|
||||
|
||||
Relocation section '.rel.plt' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||
[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
|
||||
[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_JUMP_SLOT[ ]+ifunc\(\)[ ]+ifunc
|
||||
|
@ -5,14 +5,10 @@
|
||||
#readelf: -r --wide
|
||||
#target: x86_64-*-*
|
||||
|
||||
Relocation section '.rela.got' at .*
|
||||
[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
|
||||
[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_GLOB_DAT[ ]+ifunc\(\)[ ]+ifunc \+ 0
|
||||
#...
|
||||
Relocation section '.rela.ifunc' at .*
|
||||
Relocation section '.rela.ifunc' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||
[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
|
||||
[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_64[ ]+ifunc\(\)[ ]+ifunc \+ 0
|
||||
#...
|
||||
Relocation section '.rela.plt' at .*
|
||||
|
||||
Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||
[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
|
||||
[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_JUMP_SLOT[ ]+ifunc\(\)[ ]+ifunc \+ 0
|
||||
|
13
ld/testsuite/ld-ifunc/ifunc-15-i386.d
Normal file
13
ld/testsuite/ld-ifunc/ifunc-15-i386.d
Normal file
@ -0,0 +1,13 @@
|
||||
#source: ifunc-15-i386.s
|
||||
#ld: -shared -m elf_i386 -z nocombreloc
|
||||
#as: --32
|
||||
#readelf: -r --wide
|
||||
#target: x86_64-*-* i?86-*-*
|
||||
|
||||
Relocation section '.rel.got' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||
[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
|
||||
[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_GLOB_DAT[ ]+ifunc\(\)[ ]+ifunc
|
||||
|
||||
Relocation section '.rel.plt' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||
[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
|
||||
[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_JUMP_SLOT[ ]+ifunc\(\)[ ]+ifunc
|
10
ld/testsuite/ld-ifunc/ifunc-15-i386.s
Normal file
10
ld/testsuite/ld-ifunc/ifunc-15-i386.s
Normal file
@ -0,0 +1,10 @@
|
||||
.text
|
||||
.type foo, @function
|
||||
.global
|
||||
foo:
|
||||
movl ifunc@GOT(%ebx), %eax
|
||||
ret
|
||||
.type ifunc, @gnu_indirect_function
|
||||
.globl ifunc
|
||||
ifunc:
|
||||
ret
|
13
ld/testsuite/ld-ifunc/ifunc-15-x86-64.d
Normal file
13
ld/testsuite/ld-ifunc/ifunc-15-x86-64.d
Normal file
@ -0,0 +1,13 @@
|
||||
#source: ifunc-15-x86-64.s
|
||||
#ld: -shared -m elf_x86_64 -z nocombreloc
|
||||
#as: --64
|
||||
#readelf: -r --wide
|
||||
#target: x86_64-*-*
|
||||
|
||||
Relocation section '.rela.got' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||
[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
|
||||
[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_GLOB_DAT[ ]+ifunc\(\)[ ]+ifunc \+ 0
|
||||
|
||||
Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||
[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
|
||||
[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_JUMP_SLOT[ ]+ifunc\(\)[ ]+ifunc \+ 0
|
10
ld/testsuite/ld-ifunc/ifunc-15-x86-64.s
Normal file
10
ld/testsuite/ld-ifunc/ifunc-15-x86-64.s
Normal file
@ -0,0 +1,10 @@
|
||||
.text
|
||||
.type foo, @function
|
||||
.global
|
||||
foo:
|
||||
movl ifunc@GOTPCREL(%rip), %eax
|
||||
ret
|
||||
.type ifunc, @gnu_indirect_function
|
||||
.globl ifunc
|
||||
ifunc:
|
||||
ret
|
@ -4,5 +4,5 @@
|
||||
#target: x86_64-*-* i?86-*-*
|
||||
|
||||
#...
|
||||
[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-fq]+<\*ABS\*(\+0x1b0|\+0x260|)@plt>
|
||||
[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-fq]+<\*ABS\*(\+0x1b0|\+0x240|)@plt>
|
||||
#pass
|
||||
|
@ -4,10 +4,9 @@
|
||||
#ld: -shared -melf32_x86_64
|
||||
#readelf: -r --wide
|
||||
|
||||
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
|
||||
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +ifunc\(\)+ +ifunc \+ 0
|
||||
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_GLOB_DAT +ifunc\(\)+ +ifunc \+ 0
|
||||
|
||||
Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
|
||||
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
||||
|
Loading…
x
Reference in New Issue
Block a user