* elf32-ppc.c (ppc_elf_relax_section): Correct conditions under

which find_plt_ent is called.  Delete redundant code.
This commit is contained in:
Alan Modra
2009-08-04 08:03:35 +00:00
parent 6fba7a0ec6
commit a9585d22b5
2 changed files with 46 additions and 38 deletions

View File

@ -1,3 +1,8 @@
2009-08-04 Alan Modra <amodra@bigpond.net.au>
* elf32-ppc.c (ppc_elf_relax_section): Correct conditions under
which find_plt_ent is called. Delete redundant code.
2009-08-03 H.J. Lu <hongjiu.lu@intel.com> 2009-08-03 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/10363 PR binutils/10363

View File

@ -5934,6 +5934,7 @@ ppc_elf_relax_section (bfd *abfd,
bfd_byte *hit_addr; bfd_byte *hit_addr;
unsigned long t0; unsigned long t0;
struct elf_link_hash_entry *h; struct elf_link_hash_entry *h;
struct plt_entry **plist;
unsigned char sym_type; unsigned char sym_type;
switch (r_type) switch (r_type)
@ -5997,11 +5998,7 @@ ppc_elf_relax_section (bfd *abfd,
|| h->root.type == bfd_link_hash_warning) || h->root.type == bfd_link_hash_warning)
h = (struct elf_link_hash_entry *) h->root.u.i.link; h = (struct elf_link_hash_entry *) h->root.u.i.link;
tsec = NULL; if (h->root.type == bfd_link_hash_defined
toff = 0;
if (tsec != NULL)
;
else if (h->root.type == bfd_link_hash_defined
|| h->root.type == bfd_link_hash_defweak) || h->root.type == bfd_link_hash_defweak)
{ {
tsec = h->root.u.def.section; tsec = h->root.u.def.section;
@ -6019,13 +6016,20 @@ ppc_elf_relax_section (bfd *abfd,
sym_type = h->type; sym_type = h->type;
} }
if (is_branch_reloc (r_type)) /* The condition here under which we call find_plt_ent must
{ match that in relocate_section. If we call find_plt_ent here
struct plt_entry **plist = NULL; but not in relocate_section, or vice versa, then the branch
destination used here may be incorrect. */
plist = NULL;
if (h != NULL) if (h != NULL)
{
/* We know is_branch_reloc (r_type) is true. */
if (h->type == STT_GNU_IFUNC
|| r_type == R_PPC_PLTREL24)
plist = &h->plt.plist; plist = &h->plt.plist;
else if (sym_type == STT_GNU_IFUNC) }
else if (sym_type == STT_GNU_IFUNC
&& elf_local_got_offsets (abfd) != NULL)
{ {
bfd_vma *local_got_offsets = elf_local_got_offsets (abfd); bfd_vma *local_got_offsets = elf_local_got_offsets (abfd);
struct plt_entry **local_plt = (struct plt_entry **) struct plt_entry **local_plt = (struct plt_entry **)
@ -6057,7 +6061,6 @@ ppc_elf_relax_section (bfd *abfd,
} }
} }
} }
}
/* If the branch and target are in the same section, you have /* If the branch and target are in the same section, you have
no hope of adding stubs. We'll error out later should the no hope of adding stubs. We'll error out later should the