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:
Max Filippov 2015-05-10 01:02:31 +03:00
parent 242cd84c93
commit dc58915f3a
4 changed files with 20 additions and 2 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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,

View File

@ -26,3 +26,13 @@
.endr
4:
j 4b
5:
j 6f
.rep 43691
_nop
.endr
6:
j 5b