diff options
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf32-spu.c | 16 |
2 files changed, 11 insertions, 10 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 8a6ad9f..e542819 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2009-06-16 Ulrich Weigand <uweigand@de.ibm.com> + + * elf32-spu.c (needs_ovl_stub): Respect .brinfo lrlive bits + also for calls. + 2009-06-16 H.J. Lu <hongjiu.lu@intel.com> * configure.in (elf): Add elf-ifunc.lo. diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c index af7afdb..e2449d4 100644 --- a/bfd/elf32-spu.c +++ b/bfd/elf32-spu.c @@ -1014,18 +1014,14 @@ needs_ovl_stub (struct elf_link_hash_entry *h, if (spu_elf_section_data (sym_sec->output_section)->u.o.ovl_index != spu_elf_section_data (input_section->output_section)->u.o.ovl_index) { - if (call || sym_type == STT_FUNC) + unsigned int lrlive = 0; + if (branch) + lrlive = (contents[1] & 0x70) >> 4; + + if (!lrlive && (call || sym_type == STT_FUNC)) ret = call_ovl_stub; else - { - ret = br000_ovl_stub; - - if (branch) - { - unsigned int lrlive = (contents[1] & 0x70) >> 4; - ret += lrlive; - } - } + ret = br000_ovl_stub + lrlive; } /* If this insn isn't a branch then we are possibly taking the |