properly patch the linker when GOROOT is a symlink

Some Go version managers like github.com/voidint/g use GOROOT symlinks,
which silently broke the way we patch the linker via go build -overlay.

Reproduced the original crash via the following testscript:

    env GARBLE_CACHE=${WORK}/garble-cache
    symlink goroot -> /usr/lib/go
    env GOROOT=${WORK}/goroot
    exec garble run main.go

    -- main.go --
    package main

    import "fmt"

    func main() {
        fmt.Println("hello world")
    }

We don't commit this testscript given how it's an expensive test
and for a relatively rare edge case whose fix is now well documented.
Moreover, as GOTOOLCHAIN is now available, I expect version managers
for Go to fade away with time.

While here, remove a debugging 'exec cat' from a testscript.

Fixes #915.
This commit is contained in:
Daniel Martí
2025-04-26 15:20:48 +02:00
committed by Paul Scheduikat
parent 62050d8e16
commit 9cf2a6a77f
2 changed files with 10 additions and 1 deletions
-1
View File
@@ -4,7 +4,6 @@
# setting up a `go` directive with its Go version.
cd mod
go mod init test
exec cat go.mod
cd ..
go env GOVERSION
setenvfile GOVERSION_UPGRADE stdout