OSDN Git Service

bfd/
authorRichard Sandiford <rsandifo@nildram.co.uk>
Mon, 25 Jun 2007 10:13:57 +0000 (10:13 +0000)
committerRichard Sandiford <rsandifo@nildram.co.uk>
Mon, 25 Jun 2007 10:13:57 +0000 (10:13 +0000)
* elfxx-mips.c (mips_elf_calculate_relocation): Allow local stubs
to be used for calls from MIPS16 code.

gas/
* config/tc-mips.h (TC_SYMFIELD_TYPE): New.
* config/tc-mips.c (append_insn): Record which symbols have
R_MIPS16_26 relocations against them.
(mips_fix_adjustable): Don't reduce relocations against such symbols.

ld/testsuite/
* ld-mips-elf/mips16-local-stubs-1.s,
* ld-mips-elf/mips16-local-stubs-1.d: New tests.
* ld-mips-elf/mips-elf.exp: Run them.

bfd/ChangeLog
bfd/elfxx-mips.c

index 258fd6f..6b396db 100644 (file)
@@ -1,3 +1,8 @@
+2007-06-25  Richard Sandiford  <richard@codesourcery.com>
+
+       * elfxx-mips.c (mips_elf_calculate_relocation): Allow local stubs
+       to be used for calls from MIPS16 code.
+
 2007-06-23  Andreas Schwab  <schwab@suse.de>
 
        * configure.in (--with-separate-debug-dir): New option.
index 1bccb33..dafd607 100644 (file)
@@ -4092,8 +4092,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
   /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
      need to redirect the call to the stub.  */
   else if (r_type == R_MIPS16_26 && !info->relocatable
-          && h != NULL
-          && ((h->call_stub != NULL || h->call_fp_stub != NULL)
+          && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
               || (local_p
                   && elf_tdata (input_bfd)->local_call_stubs != NULL
                   && elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))