• Austin Clements's avatar
    cmd/internal/obj/arm: fix/rationalize checkpool distance check · 1b44167d
    Austin Clements authored
    When deciding whether to flush the constant pool, the distance check
    in checkpool can fail to account for padding inserted before the next
    instruction by nacl.
    
    For example, see this failure:
    https://go-review.googlesource.com/c/go/+/109350/2#message-07085b591227824bb1d646a7192cbfa7e0b97066
    Here, the pool should be flushed before a CALL instruction, but
    checkpool only considers the CALL instruction to be 4 bytes and
    doesn't account for the 8 extra bytes of alignment padding added
    before it by asmoutnacl. As a result, it flushes the pool after the
    CALL instruction, which is 4 bytes too late.
    
    Furthermore, there's no explanation for the rather convoluted
    expression used to decide if we need to emit the constant pool.
    
    This CL modifies checkpool to take the PC following the tentative
    instruction as an argument. The caller knows this already and this way
    checkpool doesn't have to guess (and get it wrong in the presence of
    padding). In the process, it rewrites the test to be structured and
    commented.
    
    Change-Id: I32a3d50ffb5a94d42be943e9bcd49036c7e9b95c
    Reviewed-on: https://go-review.googlesource.com/110017
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
    1b44167d
Name
Last commit
Last update
.github Loading commit data...
api Loading commit data...
doc Loading commit data...
lib/time Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTING.md Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README.md Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...