diff options
author | Cherry Mui <cherryyz@google.com> | 2024-06-21 11:56:45 -0400 |
---|---|---|
committer | Carlos Amedee <carlos@golang.org> | 2024-07-10 19:31:27 +0000 |
commit | 4e548f2c8e489a408033c8aab336077b16bc8cf7 (patch) | |
tree | 520575eb6946ccf8af65e5e2a6350d8c4d37c904 | |
parent | 45f9ded1df582eb87e06d7fc8cab905ee68f8aa7 (diff) | |
download | go-upstream-release-branch.go1.22.tar.gz |
[release-branch.go1.22] cmd/link: don't let dsymutil delete our temp directoryupstream-release-branch.go1.22
To work around #59026, where dsymutil may not clean up its temp
directory at exit, we set DSYMUTIL_REPRODUCER_PATH to our temp
directory so it uses that, and we can delete it at the end.
In Xcode 16 beta, dsymutil deletes the DSYMUTIL_REPRODUCER_PATH
directory even if it is not empty. We still need our tmpdir at the
point, so give a subdirectory to dsymutil instead.
Updates #68088.
Fixes #68198.
Change-Id: I18759cc39512819bbd0511793ce917eae72245d6
Reviewed-on: https://go-review.googlesource.com/c/go/+/593659
Reviewed-by: Than McIntosh <thanm@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
(cherry picked from commit 5f319b75075a62ab176ab8c25f0e45f2ae4f0704)
Reviewed-on: https://go-review.googlesource.com/c/go/+/596455
-rw-r--r-- | src/cmd/link/internal/ld/lib.go | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index eab74dc328..7af88869d2 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -1954,7 +1954,15 @@ func (ctxt *Link) hostlink() { cmd := exec.Command(dsymutilCmd, "-f", *flagOutfile, "-o", dsym) // dsymutil may not clean up its temp directory at exit. // Set DSYMUTIL_REPRODUCER_PATH to work around. see issue 59026. - cmd.Env = append(os.Environ(), "DSYMUTIL_REPRODUCER_PATH="+*flagTmpdir) + // dsymutil (Apple LLVM version 16.0.0) deletes the directory + // even if it is not empty. We still need our tmpdir, so give a + // subdirectory to dsymutil. + dsymDir := filepath.Join(*flagTmpdir, "dsymutil") + err = os.MkdirAll(dsymDir, 0777) + if err != nil { + Exitf("fail to create temp dir: %v", err) + } + cmd.Env = append(os.Environ(), "DSYMUTIL_REPRODUCER_PATH="+dsymDir) if ctxt.Debugvlog != 0 { ctxt.Logf("host link dsymutil:") for _, v := range cmd.Args { |