xtensa: fix gas trampolines regression
Extra condition 'abs (addr - trampaddr) < J_RANGE / 2' for trampoline selection results in regressions: when relaxable jump is little longer than J_RANGE so that single trampoline makes two new jumps, one longer than J_RANGE / 2 and one shorter, correct trampoline cannot be found. Drop that condition. 2015-05-13 Max Filippov <jcmvbkbc@gmail.com> gas/ * config/tc-xtensa.c (xtensa_relax_frag): Allow trampoline to be closer than J_RANGE / 2 to jump frag. gas/testsuite/ * gas/xtensa/trampoline.s: Add regression testcase.
This commit is contained in:
parent
242cd84c93
commit
dc58915f3a
@ -1,3 +1,8 @@
|
||||
2015-05-13 Max Filippov <jcmvbkbc@gmail.com>
|
||||
|
||||
* config/tc-xtensa.c (xtensa_relax_frag): Allow trampoline to be
|
||||
closer than J_RANGE / 2 to jump frag.
|
||||
|
||||
2015-05-11 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* configure.tgt (arch): Set to iamcu for i386-*-elfiamcu target.
|
||||
|
@ -9071,8 +9071,7 @@ xtensa_relax_frag (fragS *fragP, long stretch, int *stretched_p)
|
||||
|
||||
trampaddr = fragP->fr_address + fragP->fr_fix;
|
||||
|
||||
if ((addr + J_RANGE < trampaddr) ||
|
||||
abs (addr - trampaddr) < J_RANGE / 2)
|
||||
if (addr + J_RANGE < trampaddr)
|
||||
continue;
|
||||
if (addr > trampaddr + J_RANGE)
|
||||
break;
|
||||
|
@ -1,3 +1,7 @@
|
||||
2015-05-13 Max Filippov <jcmvbkbc@gmail.com>
|
||||
|
||||
* gas/xtensa/trampoline.s: Add regression testcase.
|
||||
|
||||
2015-05-11 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* gas/i386/i386.exp: Run iamcu-1, iamcu-2, iamcu-3, iamcu-inval-1,
|
||||
|
@ -26,3 +26,13 @@
|
||||
.endr
|
||||
4:
|
||||
j 4b
|
||||
|
||||
5:
|
||||
j 6f
|
||||
|
||||
.rep 43691
|
||||
_nop
|
||||
.endr
|
||||
|
||||
6:
|
||||
j 5b
|
||||
|
Loading…
x
Reference in New Issue
Block a user