• Austin Clements's avatar
    [dev.cc] liblink: don't patch jumps to jumps to symbols · e04c8b06
    Austin Clements authored
    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
    e04c8b06
pass.c 3.18 KB