]> Cypherpunks repositories - gostls13.git/commit
[dev.cc] liblink: don't patch jumps to jumps to symbols
authorAustin Clements <austin@google.com>
Fri, 5 Dec 2014 14:24:01 +0000 (09:24 -0500)
committerAustin Clements <austin@google.com>
Fri, 5 Dec 2014 14:24:01 +0000 (09:24 -0500)
commite04c8b063fd7d7aaded8e1ff549dbb520038c61e
treea19eedb14272aa2ba3073f144b8a0c9184cc67dd
parent274976f45c9b2c3f9140768b457e9140ea65bfb4
[dev.cc] liblink: don't patch jumps to jumps to symbols

When liblink sees something like

       JMP x
       ...
    x: JMP y

it rewrites the first jump to jump directly to y.  This is
fine if y is a resolved label.  However, it *also* does this
if y is a function symbol, but fails to carry over the
relocation that would later patch in that symbol's value.  As
a result, the original jump becomes either a self-jump (if
relative) or a jump to PC 0 (if absolute).

Fix this by disabling this optimization if the jump being
patched in is a jump to a symbol.

LGTM=minux
R=rsc, minux
CC=golang-codereviews
https://golang.org/cl/185890044
src/liblink/pass.c