X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bfd%2Fcoff-mips.c;h=76de32009af6e38b301acc7cafdb88264059ab33;hb=28ce7b07473c33f2e4e380a861973d68ffe8017f;hp=c9c7fc66ba229261f92c663da0562ebd0072aa7c;hpb=618265039f697eab9e72bb58b95fc2d32925df58;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/coff-mips.c b/bfd/coff-mips.c index c9c7fc66ba..76de32009a 100644 --- a/bfd/coff-mips.c +++ b/bfd/coff-mips.c @@ -31,6 +31,9 @@ #include "coff/mips.h" #include "libcoff.h" #include "libecoff.h" + +/* All users of this file have bfd_octets_per_byte (abfd, sec) == 1. */ +#define OCTETS_PER_BYTE(ABFD, SEC) 1 /* Prototypes for static functions. */ static bfd_reloc_status_type @@ -484,13 +487,13 @@ mips_refhi_reloc (bfd *abfd ATTRIBUTE_UNUSED, relocation described above. */ static bfd_reloc_status_type -mips_reflo_reloc (bfd *abfd ATTRIBUTE_UNUSED, +mips_reflo_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, void * data, asection *input_section, bfd *output_bfd, - char **error_message ATTRIBUTE_UNUSED) + char **error_message) { if (mips_refhi_list != NULL) { @@ -503,11 +506,12 @@ mips_reflo_reloc (bfd *abfd ATTRIBUTE_UNUSED, unsigned long val; unsigned long vallo; struct mips_hi *next; + bfd_size_type octets = (reloc_entry->address + * OCTETS_PER_BYTE (abfd, input_section)); + bfd_byte *loc = (bfd_byte *) data + octets; - if (! bfd_reloc_offset_in_range (reloc_entry->howto, abfd, - input_section, - reloc_entry->address - * bfd_octets_per_byte (abfd, NULL))) + if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd, + input_section, octets)) return bfd_reloc_outofrange; /* Do the REFHI relocation. Note that we actually don't @@ -515,8 +519,7 @@ mips_reflo_reloc (bfd *abfd ATTRIBUTE_UNUSED, where to find the low 16 bits of the addend needed by the REFHI. */ insn = bfd_get_32 (abfd, l->addr); - vallo = (bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address) - & 0xffff); + vallo = bfd_get_32 (abfd, loc) & 0xffff; val = ((insn & 0xffff) << 16) + vallo; val += l->addend; @@ -544,7 +547,7 @@ mips_reflo_reloc (bfd *abfd ATTRIBUTE_UNUSED, /* Now do the REFLO reloc in the usual way. */ return mips_generic_reloc (abfd, reloc_entry, symbol, data, - input_section, output_bfd, error_message); + input_section, output_bfd, error_message); } /* Do a GPREL relocation. This is a 16 bit value which must become