Fix trampolines search code for conditional branches
For conditional branches that need more than one trampoline to reach its target assembler couldn't always find suitable trampoline because post-loop condition check was placed inside the loop, resulting in premature loop termination. Move check outside the loop. This fixes the following build errors seen when assembling huge files produced by gcc: Error: jump target out of range; no usable trampoline found Error: operand 1 of 'j' has out of range value '307307' 2014-11-25 Max Filippov <jcmvbkbc@gmail.com> gas/ * config/tc-xtensa.c (search_trampolines): Move post-loop condition check outside the search loop. gas/testsuite/ * gas/xtensa/trampoline.d: Add expected output for branches. * gas/xtensa/trampoline.s: Add test case for branches.
This commit is contained in:
parent
60bb06bc89
commit
d92b6eece4
5 changed files with 29 additions and 4 deletions
|
@ -1,3 +1,8 @@
|
|||
2014-11-25 Max Filippov <jcmvbkbc@gmail.com>
|
||||
|
||||
* config/tc-xtensa.c (search_trampolines): Move post-loop
|
||||
condition check outside the search loop.
|
||||
|
||||
2014-11-24 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* configure: Regenerated.
|
||||
|
|
|
@ -9514,11 +9514,11 @@ search_trampolines (TInsn *tinsn, fragS *fragP, bfd_boolean unreachable_only)
|
|||
if (next_addr == 0 || addr - next_addr > J_RANGE)
|
||||
break;
|
||||
}
|
||||
if (abs (addr - this_addr) < J_RANGE)
|
||||
return tf;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
if (abs (addr - this_addr) < J_RANGE)
|
||||
return tf;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
for ( ; tf; tf = tf->next)
|
||||
{
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2014-11-25 Max Filippov <jcmvbkbc@gmail.com>
|
||||
* gas/xtensa/trampoline.d: Add expected output for branches.
|
||||
* gas/xtensa/trampoline.s: Add test case for branches.
|
||||
|
||||
2014-11-21 Terry Guo <terry.guo@arm.com>
|
||||
|
||||
* gas/arm/attr-arch-assumption.d: New file.
|
||||
|
|
|
@ -24,3 +24,12 @@
|
|||
.*33462:.*j.0x49407
|
||||
#...
|
||||
.*49407:.*j.0x49407
|
||||
.*4940a:.*beqz.n.a2,.0x4940f
|
||||
.*4940c:.*j.0x693d1
|
||||
#...
|
||||
.*693d1:.*j.0x7ddd4
|
||||
#...
|
||||
.*7ddd4:.*j.0x927f5
|
||||
#...
|
||||
.*927f5:.*j.0x927f5
|
||||
#...
|
||||
|
|
|
@ -19,3 +19,10 @@
|
|||
.endr
|
||||
3:
|
||||
j 3b
|
||||
bnez a2, 4f
|
||||
.rep 50000
|
||||
and a2, a2, a3
|
||||
_ret
|
||||
.endr
|
||||
4:
|
||||
j 4b
|
||||
|
|
Loading…
Reference in a new issue