From d9df8f96690f7b1df47d9fa27870645c8b76696c Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 25 Oct 2010 03:03:18 +0000 Subject: PR gas/12049 * write.c (relax_frag): Don't allow forward branches to temporarily becomde backward branches. --- gas/write.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'gas/write.c') diff --git a/gas/write.c b/gas/write.c index 080216a240..4b6592f7aa 100644 --- a/gas/write.c +++ b/gas/write.c @@ -2163,6 +2163,13 @@ relax_frag (segT segment, fragS *fragP, long stretch) if (stretch < 0 || sym_frag->region == fragP->region) target += stretch; + /* If we get here we know we have a forward branch. This + relax pass may have stretched previous instructions so + far that omitting STRETCH would make the branch + negative. Don't allow this in case the negative reach is + large enough to require a larger branch instruction. */ + else if (target < address) + target = fragP->fr_next->fr_address + stretch; } } -- cgit v1.2.1