]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: don't let dsymutil delete our temp directory
authorCherry Mui <cherryyz@google.com>
Fri, 21 Jun 2024 15:56:45 +0000 (11:56 -0400)
committerCherry Mui <cherryyz@google.com>
Wed, 26 Jun 2024 16:17:27 +0000 (16:17 +0000)
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.

For #68088.

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>

src/cmd/link/internal/ld/lib.go

index c29a532bfd29737bb69a79a9183531b0ad1b36c4..fee7888b7cf982bca72c4d8207a3113d18e76e0a 100644 (file)
@@ -2009,7 +2009,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 {