Correct elf32-ppc dynamic relocs
Alan Modra
amodra@bigpond.net.au
Wed Dec 18 05:16:00 GMT 2002
Add a comment to stop me "fixing" this code again..
* elf32-ppc.c (ppc_elf_relocate_section): Reorganize dynamic reloc
code a little. Comment on dynamic relocs against section symbols.
Index: bfd/elf32-ppc.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-ppc.c,v
retrieving revision 1.59
diff -u -p -r1.59 elf32-ppc.c
--- bfd/elf32-ppc.c 12 Dec 2002 10:26:01 -0000 1.59
+++ bfd/elf32-ppc.c 17 Dec 2002 06:15:47 -0000
@@ -3221,11 +3221,10 @@ ppc_elf_relocate_section (output_bfd, in
}
else
{
+ outrel.r_addend = relocation + rel->r_addend;
+
if (r_type == R_PPC_ADDR32)
- {
- outrel.r_info = ELF32_R_INFO (0, R_PPC_RELATIVE);
- outrel.r_addend = relocation + rel->r_addend;
- }
+ outrel.r_info = ELF32_R_INFO (0, R_PPC_RELATIVE);
else
{
long indx;
@@ -3239,7 +3238,8 @@ ppc_elf_relocate_section (output_bfd, in
== bfd_link_hash_defweak));
sec = h->root.u.def.section;
}
- if (sec != NULL && bfd_is_abs_section (sec))
+
+ if (bfd_is_abs_section (sec))
indx = 0;
else if (sec == NULL || sec->owner == NULL)
{
@@ -3250,6 +3250,11 @@ ppc_elf_relocate_section (output_bfd, in
{
asection *osec;
+ /* We are turning this relocation into one
+ against a section symbol. It would be
+ proper to subtract the symbol's value,
+ osec->vma, from the emitted reloc addend,
+ but ld.so expects buggy relocs. */
osec = sec->output_section;
indx = elf_section_data (osec)->dynindx;
BFD_ASSERT (indx > 0);
@@ -3264,7 +3269,6 @@ ppc_elf_relocate_section (output_bfd, in
}
outrel.r_info = ELF32_R_INFO (indx, r_type);
- outrel.r_addend = relocation + rel->r_addend;
}
}
--
Alan Modra
IBM OzLabs - Linux Technology Centre
More information about the Binutils
mailing list