Skip local IFUNC symbols when checking dynamic relocs in read-only sections.
bfd/ 2011-04-21 H.J. Lu <hongjiu.lu@intel.com> PR ld/12694 * elf32-i386.c (elf_i386_readonly_dynrelocs): Skip local IFUNC symbols. * elf64-x86-64.c (elf_x86_64_readonly_dynrelocs): Likewise. ld/testsuite/ 2011-04-21 H.J. Lu <hongjiu.lu@intel.com> PR ld/12694 * ld-ifunc/ifunc-14-i386.d: New. * ld-ifunc/ifunc-14-x86-64.d: Likewise. * ld-ifunc/ifunc-14a.s: Likewise. * ld-ifunc/ifunc-14b.s: Likewise.
This commit is contained in:
parent
f6df62c820
commit
aa71524235
8 changed files with 57 additions and 0 deletions
|
@ -1,3 +1,10 @@
|
|||
2011-04-21 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/12694
|
||||
* elf32-i386.c (elf_i386_readonly_dynrelocs): Skip local IFUNC
|
||||
symbols.
|
||||
* elf64-x86-64.c (elf_x86_64_readonly_dynrelocs): Likewise.
|
||||
|
||||
2011-04-21 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elf32-i386.c (elf_i386_finish_dynamic_symbol): Return false
|
||||
|
|
|
@ -2384,6 +2384,10 @@ elf_i386_readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
|||
if (h->root.type == bfd_link_hash_warning)
|
||||
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
||||
|
||||
/* Skip local IFUNC symbols. */
|
||||
if (h->forced_local && h->type == STT_GNU_IFUNC)
|
||||
return TRUE;
|
||||
|
||||
eh = (struct elf_i386_link_hash_entry *) h;
|
||||
for (p = eh->dyn_relocs; p != NULL; p = p->next)
|
||||
{
|
||||
|
|
|
@ -2299,6 +2299,10 @@ elf_x86_64_readonly_dynrelocs (struct elf_link_hash_entry *h,
|
|||
if (h->root.type == bfd_link_hash_warning)
|
||||
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
||||
|
||||
/* Skip local IFUNC symbols. */
|
||||
if (h->forced_local && h->type == STT_GNU_IFUNC)
|
||||
return TRUE;
|
||||
|
||||
eh = (struct elf_x86_64_link_hash_entry *) h;
|
||||
for (p = eh->dyn_relocs; p != NULL; p = p->next)
|
||||
{
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
2011-04-21 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/12694
|
||||
* ld-ifunc/ifunc-14-i386.d: New.
|
||||
* ld-ifunc/ifunc-14-x86-64.d: Likewise.
|
||||
* ld-ifunc/ifunc-14a.s: Likewise.
|
||||
* ld-ifunc/ifunc-14b.s: Likewise.
|
||||
|
||||
2011-04-19 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* ld-plugin/plugin-ignore.d: Removed.
|
||||
|
|
11
ld/testsuite/ld-ifunc/ifunc-14-i386.d
Normal file
11
ld/testsuite/ld-ifunc/ifunc-14-i386.d
Normal file
|
@ -0,0 +1,11 @@
|
|||
#source: ifunc-14a.s
|
||||
#source: ifunc-14b.s
|
||||
#ld: -shared -m elf_i386 -z nocombreloc
|
||||
#as: --32
|
||||
#readelf: -d --wide
|
||||
#target: x86_64-*-* i?86-*-*
|
||||
|
||||
#failif
|
||||
#...
|
||||
.*\(TEXTREL\).*
|
||||
#...
|
11
ld/testsuite/ld-ifunc/ifunc-14-x86-64.d
Normal file
11
ld/testsuite/ld-ifunc/ifunc-14-x86-64.d
Normal file
|
@ -0,0 +1,11 @@
|
|||
#source: ifunc-14a.s
|
||||
#source: ifunc-14b.s
|
||||
#ld: -shared -m elf_x86_64 -z nocombreloc
|
||||
#as: --64
|
||||
#readelf: -d
|
||||
#target: x86_64-*-*
|
||||
|
||||
#failif
|
||||
#...
|
||||
.*\(TEXTREL\).*
|
||||
#...
|
7
ld/testsuite/ld-ifunc/ifunc-14a.s
Normal file
7
ld/testsuite/ld-ifunc/ifunc-14a.s
Normal file
|
@ -0,0 +1,7 @@
|
|||
.text
|
||||
.globl bar
|
||||
.type bar, @function
|
||||
bar:
|
||||
jmp foo
|
||||
.size bar, .-bar
|
||||
.hidden foo
|
5
ld/testsuite/ld-ifunc/ifunc-14b.s
Normal file
5
ld/testsuite/ld-ifunc/ifunc-14b.s
Normal file
|
@ -0,0 +1,5 @@
|
|||
.type foo, %gnu_indirect_function
|
||||
.globl foo
|
||||
foo:
|
||||
ret
|
||||
.size foo, .-foo
|
Loading…
Reference in a new issue