Add BazelCrashUtils to make it easier to crash the JVM when uncaught exceptions are detected in async worker threads.

PiperOrigin-RevId: 193725871
diff --git a/src/main/java/com/google/devtools/build/lib/util/CustomExitCodePublisher.java b/src/main/java/com/google/devtools/build/lib/util/CustomExitCodePublisher.java
index c281f5a..d94cf86 100644
--- a/src/main/java/com/google/devtools/build/lib/util/CustomExitCodePublisher.java
+++ b/src/main/java/com/google/devtools/build/lib/util/CustomExitCodePublisher.java
@@ -13,28 +13,34 @@
 // limitations under the License.
 package com.google.devtools.build.lib.util;
 
-import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.Path;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import javax.annotation.Nullable;
 
 /**
  * Provides an external way for the Bazel server to communicate its exit code to the client, when
  * the main gRPC channel is unavailable because the exit is too abrupt or originated in an async
  * thread.
+ *
+ * <p>Uses Java 8 {@link Path} objects rather than Bazel ones to avoid depending on the rest of
+ * Bazel.
  */
 public class CustomExitCodePublisher {
   private static final String EXIT_CODE_FILENAME = "exit_code_to_use_on_abrupt_exit";
   @Nullable private static Path abruptExitCodeFilePath = null;
 
-  public static void setAbruptExitStatusFileDir(Path path) {
-    abruptExitCodeFilePath = path.getChild(EXIT_CODE_FILENAME);
+  public static void setAbruptExitStatusFileDir(String path) {
+    abruptExitCodeFilePath = Paths.get(path).resolve(EXIT_CODE_FILENAME);
   }
 
   public static void maybeWriteExitStatusFile(int exitCode) {
     if (abruptExitCodeFilePath != null) {
       try {
-        FileSystemUtils.writeContentAsLatin1(abruptExitCodeFilePath, String.valueOf(exitCode));
+        Files.write(
+            abruptExitCodeFilePath, String.valueOf(exitCode).getBytes(StandardCharsets.UTF_8));
       } catch (IOException ioe) {
         System.err.printf(
             "io error writing %d to abrupt exit status file %s: %s\n",