]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gas: xtensa: fix trampoline placement
authorMax Filippov <jcmvbkbc@gmail.com>
Sun, 11 Feb 2018 05:59:54 +0000 (21:59 -0800)
committerMax Filippov <jcmvbkbc@gmail.com>
Wed, 14 Feb 2018 16:58:46 +0000 (08:58 -0800)
For jumps requiring multiple trampolines trampoline placement code may
place multiple sequential trampolines into the same frag. Don't do that.

gas/
2018-02-14  Max Filippov  <jcmvbkbc@gmail.com>

Backport from mainline
2018-02-13  Max Filippov  <jcmvbkbc@gmail.com>

* config/tc-xtensa.c (xg_find_best_trampoline): Skip trampoline
frag that contains source address.

gas/ChangeLog
gas/config/tc-xtensa.c

index fbc32783305214140edd958d52b12d120dcef06d..e981564e291adde70e43fb13a56ab8c6fd3f840a 100644 (file)
@@ -1,3 +1,11 @@
+2018-02-14  Max Filippov  <jcmvbkbc@gmail.com>
+
+       Backport from mainline
+       2018-02-13  Max Filippov  <jcmvbkbc@gmail.com>
+
+       * config/tc-xtensa.c (xg_find_best_trampoline): Skip trampoline
+       frag that contains source address.
+
 2018-02-12  Nick Clifton  <nickc@redhat.com>
 
        * po/ru.po: Updated Russian translation.
index 58c2e10c1878f4b6bea92ba68232e068238db2e0..b522447b51313967a8e549ba21870cbb8ec7a497 100644 (file)
@@ -9339,6 +9339,12 @@ static size_t xg_find_best_trampoline (struct trampoline_index *idx,
                 trampoline_frag->fr_address > target))
              continue;
 
+           /* Don't choose trampoline that contains the source.  */
+           if (source >= trampoline_frag->fr_address
+               && source <= trampoline_frag->fr_address +
+               trampoline_frag->fr_fix)
+             continue;
+
            off = trampoline_frag->fr_address - fulcrum;
            /* Stop if some trampoline is found and the search is more than
               J_RANGE / 4 from the projected fulcrum.  A trampoline w/o jump