diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactory.java
index 51f93be..0c44911 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactory.java
@@ -242,6 +242,8 @@
           options.underlying().get(CoreOptions.class).affectedByStarlarkTransition;
       coreOptions.executionInfoModifier =
           options.underlying().get(CoreOptions.class).executionInfoModifier;
+      coreOptions.overrideNamePlatformInOutputDirEntries =
+          options.underlying().get(CoreOptions.class).overrideNamePlatformInOutputDirEntries;
       return result;
     }
   }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationFunctionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationFunctionTest.java
index c8be510..a078f10 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationFunctionTest.java
@@ -534,4 +534,63 @@
         .isEqualTo(CppConfiguration.DynamicMode.OFF);
     assertThat(getConfiguration(dep).getFragment(JavaConfiguration.class).getUseIjars()).isTrue();
   }
+
+  @Test
+  public void testPlatformExplicitInOutputDirAndDynamicBaseline_withExecConfigDep()
+      throws Exception {
+    writeAllowlistFile();
+    scratch.file(
+        "test/rules.bzl",
+        """
+        load("//myinfo:myinfo.bzl", "MyInfo")
+
+        def _impl(ctx):
+            return MyInfo(dep = ctx.attr.dep)
+
+        my_rule = rule(
+            implementation = _impl,
+            attrs = {
+                "dep": attr.label(cfg = 'exec'),
+            },
+        )
+        """);
+    scratch.file(
+        "test/BUILD",
+        """
+        load("//test:rules.bzl", "my_rule")
+
+        my_rule(
+            name = "test",
+            dep = ":dep",
+        )
+
+        my_rule(
+            name = "dep",
+        )
+        """);
+    scratch.file(
+        "platforms/BUILD",
+        """
+        platform(name = "alpha")
+        """);
+
+    useConfiguration(
+        "--compilation_mode=fastbuild",
+        "--platforms=//platforms:alpha",
+        "--host_platform=//platforms:alpha",
+        "--experimental_platform_in_output_dir",
+        "--noexperimental_use_platforms_in_output_dir_legacy_heuristic",
+        "--experimental_override_name_platform_in_output_dir=//platforms:alpha=alpha-override",
+        "--experimental_output_directory_naming_scheme=diff_against_dynamic_baseline");
+    ConfiguredTarget test = getConfiguredTarget("//test");
+
+    assertThat(getMnemonic(test)).contains("alpha-override-fastbuild");
+    assertThat(getMnemonic(test)).doesNotContain("-ST-");
+
+    ConfiguredTarget dep = (ConfiguredTarget) getMyInfoFromTarget(test).getValue("dep");
+
+    // The platform name override is used in dep with exec config
+    assertThat(getMnemonic(dep)).contains("alpha-override-opt-exec");
+    assertThat(getMnemonic(dep)).doesNotContain("-ST-");
+  }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactoryTest.java b/src/test/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactoryTest.java
index 4e80fef..c222a50 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactoryTest.java
@@ -71,9 +71,9 @@
     assertThat(result).isNotNull();
     assertThat(result).isNotSameInstanceAs(options);
 
-    assertThat(result.contains(CoreOptions.class)).isNotNull();
+    assertThat(result.contains(CoreOptions.class)).isTrue();
     assertThat(result.get(CoreOptions.class).isExec).isTrue();
-    assertThat(result.contains(PlatformOptions.class)).isNotNull();
+    assertThat(result.contains(PlatformOptions.class)).isTrue();
     assertThat(result.get(PlatformOptions.class).platforms).containsExactly(EXECUTION_PLATFORM);
   }
 
@@ -280,4 +280,44 @@
     assertThat(missingMetadataTagOptions).isEmpty();
     assertThat(unpreservedOptions.build()).isEmpty();
   }
+
+  @Test
+  public void platformInOutputPathWorksInExecMode() throws Exception {
+    scratch.file(
+        "platforms/BUILD",
+        """
+        platform(name = "mock_platform")
+        """);
+    scratch.file(
+        "test/lib.bzl",
+        """
+        my_rule = rule(
+            implementation = lambda ctx: [],
+            attrs = {
+                "exec_deps": attr.label_list(cfg = "exec"),
+            },
+        )
+        """);
+    scratch.file(
+        "test/BUILD",
+        """
+        load(":lib.bzl", "my_rule")
+        my_rule(
+            name = "parent",
+            exec_deps = [":child"]
+        )
+        my_rule(name = "child")
+        """);
+
+    useConfiguration(
+        "--experimental_platform_in_output_dir",
+        "--extra_execution_platforms=//platforms:mock_platform",
+        "--experimental_override_name_platform_in_output_dir=//platforms:mock_platform=mock_platform_path_string");
+    BuildConfigurationValue execConfig =
+        getConfiguration(
+            getDirectPrerequisite(getConfiguredTarget("//test:parent"), "//test:child"));
+
+    assertThat(execConfig.isExecConfiguration()).isTrue();
+    assertThat(execConfig.getOutputDirectoryName()).isEqualTo("mock_platform_path_string-opt-exec");
+  }
 }
