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:
H.J. Lu 2011-04-21 22:25:39 +00:00
parent f6df62c820
commit aa71524235
8 changed files with 57 additions and 0 deletions

View File

@ -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

View File

@ -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)
{

View File

@ -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)
{

View File

@ -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.

View 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\).*
#...

View 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\).*
#...

View File

@ -0,0 +1,7 @@
.text
.globl bar
.type bar, @function
bar:
jmp foo
.size bar, .-bar
.hidden foo

View File

@ -0,0 +1,5 @@
.type foo, %gnu_indirect_function
.globl foo
foo:
ret
.size foo, .-foo