This is the mail archive of the mailing list for the binutils project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] gas: xtensa: fix trampoline placement

For jumps requiring multiple trampolines trampoline placement code may
place multiple sequential trampolines into the same frag. Don't do that.

2018-02-10  Max Filippov  <>

	* config/tc-xtensa.c (xg_find_best_trampoline): Skip trampoline
	frag that contains source address.
 gas/config/tc-xtensa.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c
index 58c2e10c1878..1dbb73aa55c7 100644
--- a/gas/config/tc-xtensa.c
+++ b/gas/config/tc-xtensa.c
@@ -9339,6 +9339,11 @@ static size_t xg_find_best_trampoline (struct trampoline_index *idx,
 		 trampoline_frag->fr_address > target))
+	    /* 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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]