Remove wrapped_clang params files after use

We use TempFile's destructor to remove the params file. Because we
previously exec'd a new process, this was never called. Now we run
them as subprocesses so we can cleanup afterwards.

Closes #12896.

PiperOrigin-RevId: 366211823
diff --git a/tools/osx/crosstool/wrapped_clang.cc b/tools/osx/crosstool/wrapped_clang.cc
index d574ed9..765b7a7 100644
--- a/tools/osx/crosstool/wrapped_clang.cc
+++ b/tools/osx/crosstool/wrapped_clang.cc
@@ -108,16 +108,6 @@
   return c_args;
 }
 
-// Turn our current process into a new process. Avoids fork overhead.
-// Never returns.
-void ExecProcess(const std::vector<std::string> &args) {
-  std::vector<const char *> exec_argv = ConvertToCArgs(args);
-  execv(args[0].c_str(), const_cast<char **>(exec_argv.data()));
-  std::cerr << "Error executing child process.'" << args[0] << "'. "
-            << strerror(errno) << "\n";
-  abort();
-}
-
 // Spawns a subprocess for given arguments args. The first argument is used
 // for the executable path.
 void RunSubProcess(const std::vector<std::string> &args) {
@@ -410,19 +400,13 @@
     }
   }
 
-  if (!postprocess) {
-    ExecProcess(invocation_args);
-    std::cerr << "ExecProcess should not return. Please fix!\n";
-    abort();
-  }
-
   RunSubProcess(invocation_args);
+  if (!postprocess) {
+    return 0;
+  }
 
   std::vector<std::string> dsymutil_args = {
       "/usr/bin/xcrun", "dsymutil", linked_binary, "-o", dsym_path, "--flat"};
-  ExecProcess(dsymutil_args);
-  std::cerr << "ExecProcess should not return. Please fix!\n";
-  abort();
-
+  RunSubProcess(dsymutil_args);
   return 0;
 }