aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Matloob <matloob@golang.org>2023-03-17 11:40:25 -0400
committerMichael Matloob <matloob@golang.org>2023-03-17 20:16:14 +0000
commit50479b79bcd5920bcbca9698f6a382660bb53179 (patch)
treeb6fe472c3a95278fad06306aab7591001638e1a9 /src
parent553506d39a44a4f56f4f801b15e82fea7f542403 (diff)
downloadgo-50479b79bcd5920bcbca9698f6a382660bb53179.tar.xz
cmd/go: make sure linker -o for plugin doesn't include tempdir path
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>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/go/internal/work/gc.go2
-rw-r--r--src/cmd/go/testdata/script/build_plugin_reproducible.txt11
2 files changed, 12 insertions, 1 deletions
diff --git a/src/cmd/go/internal/work/gc.go b/src/cmd/go/internal/work/gc.go
index ec01798e09..c144413f85 100644
--- a/src/cmd/go/internal/work/gc.go
+++ b/src/cmd/go/internal/work/gc.go
@@ -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
index 0000000000..b19f0eaa0d
--- /dev/null
+++ b/src/cmd/go/testdata/script/build_plugin_reproducible.txt
@@ -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