Equip LabelCause with DetailedExitCode, relay detailed input failures in action execution

LabelCauses now specify a DetailedExitCode (like ActionFailed Causes).
They're used during action execution to specify the cause of a missing
input that fails the execution.

MissingFileArtifactValue relays the DetailedExitCode describing why the
file was missing. It no longer contains an exception. The exception was
never used as an exception anyway (just as a bearer of a string).

To be compatible with the required DetailedExitCode in LabelCauses,
ToolchainExceptions now also specify detailed failures.

RELNOTES: None.
PiperOrigin-RevId: 332932518
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
index 3e1d62e..83d20e0 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
@@ -393,7 +393,7 @@
         } catch (ToolchainException e) {
           // TODO(katre): better error handling
           throw new AspectCreationException(
-              e.getMessage(), new LabelCause(key.getLabel(), e.getMessage()));
+              e.getMessage(), new LabelCause(key.getLabel(), e.getDetailedExitCode()));
         }
       }
       if (env.valuesMissing()) {
@@ -498,7 +498,7 @@
     } catch (ToolchainException e) {
       throw new AspectFunctionException(
           new AspectCreationException(
-              e.getMessage(), new LabelCause(key.getLabel(), e.getMessage())));
+              e.getMessage(), new LabelCause(key.getLabel(), e.getDetailedExitCode())));
     }
   }