]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: make sure linker -o for plugin doesn't include tempdir path
authorMichael Matloob <matloob@golang.org>
Fri, 17 Mar 2023 15:40:25 +0000 (11:40 -0400)
committerMichael Matloob <matloob@golang.org>
Fri, 17 Mar 2023 20:16:14 +0000 (20:16 +0000)
There is already a case that when buildmode=shared passes only the
basename of the -o argument to the link command to the linker (and
runs in the directory of that argument) to avoid having that
(temporary) directory of the file be included in the LC_ID_DYLIB load
command. Extend the case to buildmode=plugin, because the same thing
can happen there.

This can only happen on darwin: the -o command can be embedded into
Mach-O and PE binaries, but plugin isn't supported on Windows.

For #58557

Change-Id: I7a4a5627148e77c6906ac4583af3d9f053d5b249
Reviewed-on: https://go-review.googlesource.com/c/go/+/477296
Run-TryBot: Michael Matloob <matloob@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Michael Matloob <matloob@golang.org>
src/cmd/go/internal/work/gc.go
src/cmd/go/testdata/script/build_plugin_reproducible.txt [new file with mode: 0644]

index ec01798e091a3cbdc92a6413804ca0fd4c1cbec6..c144413f85f7e0ecffa73d528770b19f6341969b 100644 (file)
@@ -684,7 +684,7 @@ func (gcToolchain) ld(b *Builder, root *Action, out, importcfg, mainpkg string)
        // On Windows, DLL file name is recorded in PE file
        // export section, so do like on OS X.
        dir := "."
-       if (cfg.Goos == "darwin" || cfg.Goos == "windows") && cfg.BuildBuildmode == "c-shared" {
+       if (cfg.Goos == "darwin" || cfg.Goos == "windows") && (cfg.BuildBuildmode == "c-shared" || cfg.BuildBuildmode == "plugin") {
                dir, out = filepath.Split(out)
        }
 
diff --git a/src/cmd/go/testdata/script/build_plugin_reproducible.txt b/src/cmd/go/testdata/script/build_plugin_reproducible.txt
new file mode 100644 (file)
index 0000000..b19f0ea
--- /dev/null
@@ -0,0 +1,11 @@
+[!buildmode:plugin] skip
+[short] skip
+
+go build -trimpath -buildvcs=false -buildmode=plugin -o a.so main.go
+go build -trimpath -buildvcs=false -buildmode=plugin -o b.so main.go
+cmp a.so b.so
+
+-- main.go --
+package main
+
+func main() {}
\ No newline at end of file