about summary refs log tree commit diff
path: root/src/tools
diff options
context:
space:
mode:
authorMads Marquart <mads@marquart.dk>2025-08-26 15:53:06 +0200
committerMads Marquart <mads@marquart.dk>2025-08-26 15:53:15 +0200
commita898f76dc7c5f00761814ab0c74676bb9b35cab5 (patch)
tree63c7148667ea6087ba25981c0edde98f658300c3 /src/tools
parentee361e8fca1c30e13e7a31cc82b64c045339d3a8 (diff)
downloadrust-a898f76dc7c5f00761814ab0c74676bb9b35cab5.tar.gz
rust-a898f76dc7c5f00761814ab0c74676bb9b35cab5.zip
Inherit TCC in debuginfo tests on macOS
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/compiletest/src/runtest/debuginfo.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/tools/compiletest/src/runtest/debuginfo.rs b/src/tools/compiletest/src/runtest/debuginfo.rs
index 6114afdc9df..24fdbab3aec 100644
--- a/src/tools/compiletest/src/runtest/debuginfo.rs
+++ b/src/tools/compiletest/src/runtest/debuginfo.rs
@@ -395,6 +395,35 @@ impl TestCx<'_> {
         // We don't want to hang when calling `quit` while the process is still running
         let mut script_str = String::from("settings set auto-confirm true\n");
 
+        // macOS has a system for restricting access to files and peripherals
+        // called Transparency, Consent, and Control (TCC), which can be
+        // configured using the "Security & Privacy" tab in your settings.
+        //
+        // This system is provenance-based: if Terminal.app is given access to
+        // your Desktop, and you launch a binary within Terminal.app, the new
+        // binary also has access to the files on your Desktop.
+        //
+        // By default though, LLDB launches binaries in very isolated
+        // contexts. This includes resetting any TCC grants that might
+        // otherwise have been inherited.
+        //
+        // In effect, this means that if the developer has placed the rust
+        // repository under one of the system-protected folders, they will get
+        // a pop-up _for each binary_ asking for permissions to access the
+        // folder - quite annoying.
+        //
+        // To avoid this, we tell LLDB to spawn processes with TCC grants
+        // inherited from the parent process.
+        //
+        // Setting this also avoids unnecessary overhead from XprotectService
+        // when running with the Developer Tool grant.
+        //
+        // TIP: If you want to allow launching `lldb ~/Desktop/my_binary`
+        // without being prompted, you can put this in your `~/.lldbinit` too.
+        if self.config.host.contains("darwin") {
+            script_str.push_str("settings set target.inherit-tcc true\n");
+        }
+
         // Make LLDB emit its version, so we have it documented in the test output
         script_str.push_str("version\n");