diff options
author | Mark Mitchell <mark@codesourcery.com> | 1999-08-09 22:45:39 +0000 |
---|---|---|
committer | Mark Mitchell <mark@codesourcery.com> | 1999-08-09 22:45:39 +0000 |
commit | b944b044fb3664008f20a3f5434325437ed99a93 (patch) | |
tree | 107c5090468b05705c048f6f48893ea0c1437f4c /bfd | |
parent | 96baa820df8126165bd3c4a33c561556b21203af (diff) | |
download | gdb-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/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/elf32-mips.c | 10 |
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. */ |