aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf32-spu.c16
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