xtensa: fix gas trampolines regression
authorMax Filippov <jcmvbkbc@gmail.com>
Sat, 9 May 2015 22:02:31 +0000 (01:02 +0300)
committerMax Filippov <jcmvbkbc@gmail.com>
Wed, 13 May 2015 16:25:52 +0000 (19:25 +0300)
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.

gas/ChangeLog
gas/config/tc-xtensa.c
gas/testsuite/ChangeLog
gas/testsuite/gas/xtensa/trampoline.s

index 4877538..683a30e 100644 (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.
index b1827fa..31c0b6b 100644 (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;
index 793b329..5f3f43d 100644 (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,
index 4465786..3cfbe97 100644 (file)
        .endr
 4:
        j       4b
+
+5:
+       j       6f
+
+       .rep    43691
+       _nop
+       .endr
+
+6:
+       j       5b