bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug ld/24564] [avr] Link fails for rjmp/rcall to symbols at range bound


From: cvs-commit at gcc dot gnu.org
Subject: [Bug ld/24564] [avr] Link fails for rjmp/rcall to symbols at range boundary with pmem-wrap-around
Date: Tue, 21 May 2019 07:08:56 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=24564

--- Comment #1 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot 
gnu.org> ---
The master branch has been updated by Senthil Kumar Selvaraj
<address@hidden>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=338ba75534fbfeb64d7009f29a89f25826a1f4d2

commit 338ba75534fbfeb64d7009f29a89f25826a1f4d2
Author: Senthil Kumar Selvaraj <address@hidden>
Date:   Thu May 16 17:16:36 2019 +0530

    Fix PR 24564 - link fails for some rcalls/rjmps with wraparound

    The current code to compute relative distance in the wrap around case does
not
    handle the edge case of the target (after adjusting for implicit PC
increment)
    being exactly half of the wrap around distance. This patch fixes that and
adds a
    testcase.

    The range for a forward relative jump call is 4096 bytes ((2 * 2047) + (2
bytes
    for the implicit PC increment)). If the target of the jump is at a distance
of
    4098 bytes, it is out of range for a forward jump - however, a backward
jump can
    still reach that address if pmem-wrap-around is 8192.

    Assume address 0 has rjmp to address 4098. With a wrap around of 8192 and
    *without* adjusting for the implicit PC increment of 2 bytes, rjmp .-4096
will
    jump to address 4096 (wrap around at 8192 and decreasing addresses from
then
    on). Adjusting 2 bytes for the implicit PC increment, the actual target is
4098.

    avr_relative_distance_considering_wrap_around though, does the wrap around
only
    if the passed in distance is less than half of the wrap around distance. In
this
    case, it is exactly equal to half (original distance 4098, adjusted
distance of
    4096 and wraparound of 8192), and the bypassed wrap around causes the reloc
    overflow error.

    Fix by wrapping around even if adjusted distance is equal to half of wrap
around
    distance.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]