]> Cypherpunks repositories - gostls13.git/commit
cmd/internal/obj/arm: fix/rationalize checkpool distance check
authorAustin Clements <austin@google.com>
Sun, 29 Apr 2018 02:00:36 +0000 (22:00 -0400)
committerAustin Clements <austin@google.com>
Mon, 30 Apr 2018 18:28:22 +0000 (18:28 +0000)
commit1b44167d055464f79c026d2023953ba7efdbcfe6
tree1808e26c116b7e594de792558d8b3b41fd4b243e
parent3bdbb5df7692142c13cf93f6d80b2a907e3f396b
cmd/internal/obj/arm: fix/rationalize checkpool distance check

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: Cherry Zhang <cherryyz@google.com>
src/cmd/internal/obj/arm/asm5.go