* elf64-ppc.c (ppc64_elf_next_input_section): Update comment.

(ppc64_elf_relocate_section): For zero sym R_PPC64_TOC relocs,
	use the function sym from the previous reloc.
This commit is contained in:
Alan Modra 2003-08-12 05:58:10 +00:00
parent 262e2d8016
commit ee87f2dab8
2 changed files with 18 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2003-08-12 Alan Modra <amodra@bigpond.net.au>
* elf64-ppc.c (ppc64_elf_next_input_section): Update comment.
(ppc64_elf_relocate_section): For zero sym R_PPC64_TOC relocs,
use the function sym from the previous reloc.
2003-08-11 Jakub Jelinek <jakub@redhat.com>
* elf32-i386.c (elf_i386_relocate_section): Make undefined symbols

View File

@ -6608,7 +6608,8 @@ ppc64_elf_next_input_section (struct bfd_link_info *info, asection *isec)
/* If a code section has a function that uses the TOC then we need
to use the right TOC (obviously). Also, make sure that .opd gets
the correct TOC value. */
the correct TOC value for R_PPC64_TOC relocs that don't have or
can't find their function symbol (shouldn't ever happen now). */
if (isec->has_gp_reloc || (isec->flags & SEC_CODE) == 0)
{
if (elf_gp (isec->owner) != 0)
@ -7327,6 +7328,16 @@ ppc64_elf_relocate_section (bfd *output_bfd,
r_type = ELF64_R_TYPE (rel->r_info);
r_symndx = ELF64_R_SYM (rel->r_info);
/* For old style R_PPC64_TOC relocs with a zero symbol, use the
symbol of the previous ADDR64 reloc. The symbol gives us the
proper TOC base to use. */
if (rel->r_info == ELF64_R_INFO (0, R_PPC64_TOC)
&& rel != relocs
&& ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_ADDR64
&& is_opd)
r_symndx = ELF64_R_SYM (rel[-1].r_info);
sym = NULL;
sec = NULL;
h = NULL;