• Austin Clements's avatar
    cmd/compile: generate ABI wrappers for //go:linkname'd symbols · b402bd44
    Austin Clements authored
    Calling a Go symbol from assembly in another package currently results
    in a link failure because the Go symbol is defined as ABIInternal, but
    the assembly call is from ABI0. In general this is okay because you
    shouldn't do this anyway, but there are special cases where this is
    necessary, especially between the runtime and packages closely tied to
    the runtime in std.
    
    Currently, we address this for runtime symbols with a hack in cmd/go
    that knows to scan related packages when building the symabis file for
    the runtime and runtime/internal/atomic. However, in addition to being
    a messy solution in the first place, this hack causes races in cmd/go
    that are difficult to work around.
    
    We considered creating dummy references from assembly in the runtime
    to these symbols, just to make sure they get ABI0 wrappers. However,
    there are a fairly large number of these symbols on some platforms,
    and it can vary significantly depending on build flags (e.g., race
    mode), so even this solution is fairly unpalatable.
    
    This CL addresses this by providing a way to mark symbols in Go code
    that should be made available to assembly in other packages. Rather
    than introduce a new pragma, we lightly expand the meaning of
    "//go:linkname", since that pragma already generally indicates that
    you're making the symbol available in a way it wasn't before. This
    also dovetails nicely with the behavior of go:linkname in gccgo, which
    makes unexported symbols available to other packages.
    
    Follow-up CLs will make use of this and then remove the hack from
    cmd/go.
    
    Updates #31230.
    
    Change-Id: I23060c97280626581f025c5c01fb8d24bb4c5159
    Reviewed-on: https://go-review.googlesource.com/c/go/+/179860
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarDavid Chase <drchase@google.com>
    b402bd44
gsubr.go 9.39 KB