summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2002-12-18 13:16:35 +0000
committerAlan Modra <amodra@bigpond.net.au>2002-12-18 13:16:35 +0000
commitc6463942e0cf21203c79a33e748c0d145b5df374 (patch)
tree489543fd32a260656a58cdc9f06a9882a3715fb2
parent9910a9b5b52930ef244309d5d351e97b5ba3980d (diff)
downloadgdb-c6463942e0cf21203c79a33e748c0d145b5df374.tar.gz
* elf32-ppc.c (ppc_elf_relocate_section): Reorganize dynamic reloc
code a little. Comment on dynamic relocs against section symbols.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf32-ppc.c16
2 files changed, 15 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index a71f60a107e..73fe10ca08b 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2002-12-18 Alan Modra <amodra@bigpond.net.au>
+
+ * elf32-ppc.c (ppc_elf_relocate_section): Reorganize dynamic reloc
+ code a little. Comment on dynamic relocs against section symbols.
+
2002-12-17 Roger Sayle <roger@eyesopen.com>
* configure.host (ia64-*-hpux*): Support 64 bit targets using
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index 791060168fb..2406c6751b5 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -3221,11 +3221,10 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
}
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, info, input_bfd, input_section,
== 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, info, input_bfd, input_section,
{
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, info, input_bfd, input_section,
}
outrel.r_info = ELF32_R_INFO (indx, r_type);
- outrel.r_addend = relocation + rel->r_addend;
}
}