aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>1999-08-09 22:45:39 +0000
committerMark Mitchell <mark@codesourcery.com>1999-08-09 22:45:39 +0000
commitb944b044fb3664008f20a3f5434325437ed99a93 (patch)
tree107c5090468b05705c048f6f48893ea0c1437f4c /bfd
parent96baa820df8126165bd3c4a33c561556b21203af (diff)
downloadgdb-b944b044fb3664008f20a3f5434325437ed99a93.zip
gdb-b944b044fb3664008f20a3f5434325437ed99a93.tar.gz
gdb-b944b044fb3664008f20a3f5434325437ed99a93.tar.bz2
* elf32-mips.c (elf_mips_howto_table): Fix src_mask for
R_MIPS_GOT16 and R_MIPS_CALL16. (mips_elf_got16_entry): Use mips_elf_high to calculate the value to use wheen looking for a preexisting GOT entry.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/elf32-mips.c10
2 files changed, 14 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 349d983..9be218b 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+1999-08-09 Mark Mitchell <mark@codesourcery.com>
+
+ * elf32-mips.c (elf_mips_howto_table): Fix src_mask for
+ R_MIPS_GOT16 and R_MIPS_CALL16.
+ (mips_elf_got16_entry): Use mips_elf_high to calculate the value
+ to use wheen looking for a preexisting GOT entry.
+
1999-08-09 Jakub Jelinek <jj@ultra.linux.cz>
* elf64-sparc.c (sparc64_elf_relocate_section): Back out part of
diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c
index f0b8bec..27e1c5e 100644
--- a/bfd/elf32-mips.c
+++ b/bfd/elf32-mips.c
@@ -602,7 +602,7 @@ static reloc_howto_type elf_mips_howto_table[] =
_bfd_mips_elf_got16_reloc, /* special_function */
"R_MIPS_GOT16", /* name */
false, /* partial_inplace */
- 0, /* src_mask */
+ 0xffff, /* src_mask */
0xffff, /* dst_mask */
false), /* pcrel_offset */
@@ -632,7 +632,7 @@ static reloc_howto_type elf_mips_howto_table[] =
bfd_elf_generic_reloc, /* special_function */
"R_MIPS_CALL16", /* name */
false, /* partial_inplace */
- 0, /* src_mask */
+ 0xffff, /* src_mask */
0xffff, /* dst_mask */
false), /* pcrel_offset */
@@ -5537,7 +5537,11 @@ mips_elf_got16_entry (abfd, info, value)
bfd_vma index;
bfd_vma address;
- value &= 0xffff0000;
+ /* Although the ABI says that it is "the high-order 16 bits" that we
+ want, it is really the %high value. The complete value is
+ calculated with a `addiu' of a LO16 relocation, just as with a
+ HI16/LO16 pair. */
+ value = mips_elf_high (value);
g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot);
/* Look to see if we already have an appropriate entry. */