PowerPC fix for ifunc broken by d1eca1e4
This probably could be fixed by making changes in relocate_section for ifunc, but it's simpler to disable the optimisation for ifunc. * elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Don't attempt to use dynrelocs for ifunc. * elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Similarly.
This commit is contained in:
parent
1240be6b7d
commit
1009ef284f
|
@ -1,3 +1,9 @@
|
||||||
|
2014-08-18 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Don't attempt to
|
||||||
|
use dynrelocs for ifunc.
|
||||||
|
* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Similarly.
|
||||||
|
|
||||||
2014-08-18 Alan Modra <amodra@gmail.com>
|
2014-08-18 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR 17287
|
PR 17287
|
||||||
|
|
|
@ -5512,9 +5512,12 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
|
||||||
{
|
{
|
||||||
/* Taking a function's address in a read/write section
|
/* Taking a function's address in a read/write section
|
||||||
doesn't require us to define the function symbol in the
|
doesn't require us to define the function symbol in the
|
||||||
executable on a global entry stub. A dynamic reloc can
|
executable on a plt call stub. A dynamic reloc can
|
||||||
be used instead. */
|
be used instead. */
|
||||||
if (h->pointer_equality_needed
|
if (h->pointer_equality_needed
|
||||||
|
&& h->type != STT_GNU_IFUNC
|
||||||
|
&& !htab->is_vxworks
|
||||||
|
&& !ppc_elf_hash_entry (h)->has_sda_refs
|
||||||
&& !readonly_dynrelocs (h))
|
&& !readonly_dynrelocs (h))
|
||||||
{
|
{
|
||||||
h->pointer_equality_needed = 0;
|
h->pointer_equality_needed = 0;
|
||||||
|
|
|
@ -7002,6 +7002,7 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
|
||||||
executable on a global entry stub. A dynamic reloc can
|
executable on a global entry stub. A dynamic reloc can
|
||||||
be used instead. */
|
be used instead. */
|
||||||
if (h->pointer_equality_needed
|
if (h->pointer_equality_needed
|
||||||
|
&& h->type != STT_GNU_IFUNC
|
||||||
&& !readonly_dynrelocs (h))
|
&& !readonly_dynrelocs (h))
|
||||||
{
|
{
|
||||||
h->pointer_equality_needed = 0;
|
h->pointer_equality_needed = 0;
|
||||||
|
|
Loading…
Reference in New Issue