aboutsummaryrefslogtreecommitdiff
path: root/bfd/elfxx-mips.c
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2003-07-09 11:52:52 +0000
committerRichard Sandiford <rdsandiford@googlemail.com>2003-07-09 11:52:52 +0000
commit0d591ff7fb37443cbb15bc2b7f0dc192cc124094 (patch)
tree96e71b20336d703e0f34441f66efe26d3eaf6072 /bfd/elfxx-mips.c
parentfdd07405582d22ef5ceb04fe805e5c32dc9ca12e (diff)
downloadgdb-0d591ff7fb37443cbb15bc2b7f0dc192cc124094.zip
gdb-0d591ff7fb37443cbb15bc2b7f0dc192cc124094.tar.gz
gdb-0d591ff7fb37443cbb15bc2b7f0dc192cc124094.tar.bz2
* elfxx-mips.c (mips_elf_create_dynamic_relocation): Fix handling
of relocations whose offset is -2.
Diffstat (limited to 'bfd/elfxx-mips.c')
-rw-r--r--bfd/elfxx-mips.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index bef1c79..9ad54fc 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -3875,9 +3875,17 @@ mips_elf_create_dynamic_relocation (output_bfd, info, rel, h, sec,
}
#endif
- if (outrel[0].r_offset == (bfd_vma) -1
- || outrel[0].r_offset == (bfd_vma) -2)
+ if (outrel[0].r_offset == (bfd_vma) -1)
+ /* The relocation field has been deleted. */
skip = TRUE;
+ else if (outrel[0].r_offset == (bfd_vma) -2)
+ {
+ /* The relocation field has been converted into a relative value of
+ some sort. Functions like _bfd_elf_write_section_eh_frame expect
+ the field to be fully relocated, so add in the symbol's value. */
+ skip = TRUE;
+ *addendp += symbol;
+ }
/* If we've decided to skip this relocation, just output an empty
record. Note that R_MIPS_NONE == 0, so that this call to memset