From b314ec0eae7a778810550ccf87cd92eda7feaf2a Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 25 Jun 2007 10:13:57 +0000 Subject: bfd/ * 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 | 5 +++++ bfd/elfxx-mips.c | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'bfd') diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 258fd6f..6b396db 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2007-06-25 Richard Sandiford + + * elfxx-mips.c (mips_elf_calculate_relocation): Allow local stubs + to be used for calls from MIPS16 code. + 2007-06-23 Andreas Schwab * configure.in (--with-separate-debug-dir): New option. diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 1bccb33..dafd607 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -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)) -- cgit v1.1