Fold FdoSupport into FdoSupportValue and remove FdoSupportProvider to FdoProvider.

Also add a few stern warnings about the extreme badness of the idea of handling a Path object in the analysis phase.

RELNOTES: None.
PiperOrigin-RevId: 210115418
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
index 9781d79..74f7052 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
@@ -227,7 +227,7 @@
     }
 
     LinkingMode linkingMode = getLinkStaticness(ruleContext, cppConfiguration);
-    FdoSupportProvider fdoSupport = common.getFdoSupport();
+    FdoProvider fdoProvider = common.getFdoProvider();
     FeatureConfiguration featureConfiguration =
         CcCommon.configureFeaturesOrReportRuleError(
             ruleContext,
@@ -243,7 +243,7 @@
 
     CcCompilationHelper compilationHelper =
         new CcCompilationHelper(
-                ruleContext, semantics, featureConfiguration, ccToolchain, fdoSupport)
+                ruleContext, semantics, featureConfiguration, ccToolchain, fdoProvider)
             .fromCommon(common, /* additionalCopts= */ ImmutableList.of())
             .addPrivateHeaders(common.getPrivateHeaders())
             .addSources(common.getSources())
@@ -279,7 +279,7 @@
                   semantics,
                   featureConfiguration,
                   ccToolchain,
-                  fdoSupport,
+                  fdoProvider,
                   ruleContext.getConfiguration())
               .fromCommon(common)
               .addDeps(ImmutableList.of(CppHelper.mallocForTarget(ruleContext)))
@@ -300,7 +300,7 @@
             ruleContext,
             ccToolchain,
             featureConfiguration,
-            fdoSupport,
+            fdoProvider,
             common,
             precompiledFiles,
             ccCompilationOutputs,
@@ -554,7 +554,7 @@
       RuleContext context,
       CcToolchainProvider toolchain,
       FeatureConfiguration featureConfiguration,
-      FdoSupportProvider fdoSupport,
+      FdoProvider fdoProvider,
       CcCommon common,
       PrecompiledFiles precompiledFiles,
       CcCompilationOutputs compilationOutputs,
@@ -568,7 +568,7 @@
       throws InterruptedException {
     CppLinkActionBuilder builder =
         new CppLinkActionBuilder(
-                context, binary, toolchain, fdoSupport, featureConfiguration, cppSemantics)
+                context, binary, toolchain, fdoProvider, featureConfiguration, cppSemantics)
             .setCrosstoolInputs(toolchain.getLink())
             .addNonCodeInputs(compilationPrerequisites);
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index 49530cf..41b0dfd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -49,7 +49,7 @@
 import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.CollidingProvidesException;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
 import com.google.devtools.build.lib.rules.cpp.CppConfiguration.HeadersCheckingMode;
-import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider.FdoMode;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
 import com.google.devtools.build.lib.shell.ShellUtils;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
@@ -159,16 +159,16 @@
 
   private final CcToolchainProvider ccToolchain;
 
-  private final FdoSupportProvider fdoSupport;
+  private final FdoProvider fdoProvider;
 
   public CcCommon(RuleContext ruleContext) {
     this.ruleContext = ruleContext;
     this.ccToolchain =
         Preconditions.checkNotNull(
             CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext));
-    this.fdoSupport =
+    this.fdoProvider =
         Preconditions.checkNotNull(
-            CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext));
+            CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext));
   }
 
   /**
@@ -410,8 +410,8 @@
   /**
    * Returns the C++ FDO optimization support provider.
    */
-  public FdoSupportProvider getFdoSupport() {
-    return fdoSupport;
+  public FdoProvider getFdoProvider() {
+    return fdoProvider;
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
index 9962f29..ddd7a54 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
@@ -50,7 +50,7 @@
 import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.VariablesExtension;
 import com.google.devtools.build.lib.rules.cpp.CppConfiguration.HeadersCheckingMode;
-import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider.FdoMode;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CompilationInfoApi;
 import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
 import com.google.devtools.build.lib.util.FileTypeSet;
@@ -95,42 +95,42 @@
       ImmutableMap.Builder<String, String> variablesBuilder,
       CppCompileActionBuilder builder,
       FeatureConfiguration featureConfiguration,
-      FdoSupportProvider fdoSupportProvider) {
+      FdoProvider fdoProvider) {
 
-    if (fdoSupportProvider != null && fdoSupportProvider.getPrefetchHintsArtifact() != null) {
+    if (fdoProvider != null && fdoProvider.getPrefetchHintsArtifact() != null) {
       variablesBuilder.put(
           CompileBuildVariables.FDO_PREFETCH_HINTS_PATH.getVariableName(),
-          fdoSupportProvider.getPrefetchHintsArtifact().getExecPathString());
+          fdoProvider.getPrefetchHintsArtifact().getExecPathString());
     }
 
     // FDO is disabled -> do nothing.
-    if (fdoSupportProvider.getFdoInstrument() == null
-        && fdoSupportProvider.getFdoMode() == FdoMode.OFF) {
+    if (fdoProvider.getFdoInstrument() == null
+        && fdoProvider.getFdoMode() == FdoMode.OFF) {
       return;
     }
 
     if (featureConfiguration.isEnabled(CppRuleClasses.FDO_INSTRUMENT)) {
       variablesBuilder.put(
           CompileBuildVariables.FDO_INSTRUMENT_PATH.getVariableName(),
-          fdoSupportProvider.getFdoInstrument());
+          fdoProvider.getFdoInstrument());
     }
 
     // Optimization phase
-    if (fdoSupportProvider.getFdoMode() != FdoMode.OFF) {
-      Iterable<Artifact> auxiliaryInputs = getAuxiliaryFdoInputs(fdoSupportProvider);
+    if (fdoProvider.getFdoMode() != FdoMode.OFF) {
+      Iterable<Artifact> auxiliaryInputs = getAuxiliaryFdoInputs(fdoProvider);
       builder.addMandatoryInputs(auxiliaryInputs);
       if (!Iterables.isEmpty(auxiliaryInputs)) {
         if (featureConfiguration.isEnabled(CppRuleClasses.AUTOFDO)
             || featureConfiguration.isEnabled(CppRuleClasses.XBINARYFDO)) {
           variablesBuilder.put(
               CompileBuildVariables.FDO_PROFILE_PATH.getVariableName(),
-              fdoSupportProvider.getProfileArtifact().getExecPathString());
+              fdoProvider.getProfileArtifact().getExecPathString());
         }
         if (featureConfiguration.isEnabled(CppRuleClasses.FDO_OPTIMIZE)) {
-          if (fdoSupportProvider.getFdoMode() == FdoMode.LLVM_FDO) {
+          if (fdoProvider.getFdoMode() == FdoMode.LLVM_FDO) {
             variablesBuilder.put(
                 CompileBuildVariables.FDO_PROFILE_PATH.getVariableName(),
-                fdoSupportProvider.getProfileArtifact().getExecPathString());
+                fdoProvider.getProfileArtifact().getExecPathString());
           }
         }
       }
@@ -138,16 +138,16 @@
   }
 
   /** Returns the auxiliary files that need to be added to the {@link CppCompileAction}. */
-  private static Iterable<Artifact> getAuxiliaryFdoInputs(FdoSupportProvider fdoSupportProvider) {
+  private static Iterable<Artifact> getAuxiliaryFdoInputs(FdoProvider fdoProvider) {
     ImmutableSet.Builder<Artifact> auxiliaryInputs = ImmutableSet.builder();
 
-    if (fdoSupportProvider.getPrefetchHintsArtifact() != null) {
-      auxiliaryInputs.add(fdoSupportProvider.getPrefetchHintsArtifact());
+    if (fdoProvider.getPrefetchHintsArtifact() != null) {
+      auxiliaryInputs.add(fdoProvider.getPrefetchHintsArtifact());
     }
 
     // If --fdo_optimize was not specified, we don't have any additional inputs.
-    if (fdoSupportProvider.getFdoMode() != FdoMode.OFF) {
-      auxiliaryInputs.add(fdoSupportProvider.getProfileArtifact());
+    if (fdoProvider.getFdoMode() != FdoMode.OFF) {
+      auxiliaryInputs.add(fdoProvider.getProfileArtifact());
     }
 
     return auxiliaryInputs.build();
@@ -293,7 +293,7 @@
 
   private final FeatureConfiguration featureConfiguration;
   private final CcToolchainProvider ccToolchain;
-  private final FdoSupportProvider fdoSupport;
+  private final FdoProvider fdoProvider;
   private boolean useDeps = true;
   private boolean generateModuleMap = true;
   private String purpose = null;
@@ -314,7 +314,7 @@
    * @param featureConfiguration activated features and action configs for the build
    * @param sourceCatagory the candidate source types for the build
    * @param ccToolchain the C++ toolchain provider for the build
-   * @param fdoSupport the C++ FDO optimization support provider for the build
+   * @param fdoProvider the C++ FDO optimization support provider for the build
    */
   public CcCompilationHelper(
       RuleContext ruleContext,
@@ -322,14 +322,14 @@
       FeatureConfiguration featureConfiguration,
       SourceCategory sourceCatagory,
       CcToolchainProvider ccToolchain,
-      FdoSupportProvider fdoSupport) {
+      FdoProvider fdoProvider) {
     this(
         ruleContext,
         semantics,
         featureConfiguration,
         sourceCatagory,
         ccToolchain,
-        fdoSupport,
+        fdoProvider,
         ruleContext.getConfiguration());
   }
 
@@ -341,7 +341,7 @@
    * @param featureConfiguration activated features and action configs for the build
    * @param sourceCatagory the candidate source types for the build
    * @param ccToolchain the C++ toolchain provider for the build
-   * @param fdoSupport the C++ FDO optimization support provider for the build
+   * @param fdoProvider the C++ FDO optimization support provider for the build
    * @param configuration the configuration that gives the directory of output artifacts
    */
   public CcCompilationHelper(
@@ -350,14 +350,14 @@
       FeatureConfiguration featureConfiguration,
       SourceCategory sourceCatagory,
       CcToolchainProvider ccToolchain,
-      FdoSupportProvider fdoSupport,
+      FdoProvider fdoProvider,
       BuildConfiguration configuration) {
     this.ruleContext = Preconditions.checkNotNull(ruleContext);
     this.semantics = Preconditions.checkNotNull(semantics);
     this.featureConfiguration = Preconditions.checkNotNull(featureConfiguration);
     this.sourceCategory = Preconditions.checkNotNull(sourceCatagory);
     this.ccToolchain = Preconditions.checkNotNull(ccToolchain);
-    this.fdoSupport = Preconditions.checkNotNull(fdoSupport);
+    this.fdoProvider = Preconditions.checkNotNull(fdoProvider);
     this.configuration = Preconditions.checkNotNull(configuration);
     this.cppConfiguration =
         Preconditions.checkNotNull(ruleContext.getFragment(CppConfiguration.class));
@@ -376,15 +376,15 @@
    * @param semantics CppSemantics for the build
    * @param featureConfiguration activated features and action configs for the build
    * @param ccToolchain the C++ toolchain provider for the build
-   * @param fdoSupport the C++ FDO optimization support provider for the build
+   * @param fdoProvider the C++ FDO optimization support provider for the build
    */
   public CcCompilationHelper(
       RuleContext ruleContext,
       CppSemantics semantics,
       FeatureConfiguration featureConfiguration,
       CcToolchainProvider ccToolchain,
-      FdoSupportProvider fdoSupport) {
-    this(ruleContext, semantics, featureConfiguration, SourceCategory.CC, ccToolchain, fdoSupport);
+      FdoProvider fdoProvider) {
+    this(ruleContext, semantics, featureConfiguration, SourceCategory.CC, ccToolchain, fdoProvider);
   }
 
   /** Sets fields that overlap for cc_library and cc_binary rules. */
@@ -1536,7 +1536,7 @@
     allAdditionalBuildVariables.putAll(additionalBuildVariables);
     if (ccRelativeName != null) {
       configureFdoBuildVariables(
-          allAdditionalBuildVariables, builder, featureConfiguration, fdoSupport);
+          allAdditionalBuildVariables, builder, featureConfiguration, fdoProvider);
     }
     return CompileBuildVariables.setupVariablesOrReportRuleError(
         ruleContext,
@@ -1552,7 +1552,7 @@
         cppModuleMap,
         usePic,
         builder.getTempOutputFile(),
-        CppHelper.getFdoBuildStamp(ruleContext, fdoSupport),
+        CppHelper.getFdoBuildStamp(ruleContext, fdoProvider),
         dotdFileExecPath,
         ImmutableList.copyOf(variablesExtensions),
         allAdditionalBuildVariables.build(),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java
index d06979b..14a4092 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcImport.java
@@ -69,14 +69,14 @@
         CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext);
     FeatureConfiguration featureConfiguration =
         CcCommon.configureFeaturesOrReportRuleError(ruleContext, ccToolchain);
-    FdoSupportProvider fdoSupport =
-        CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
+    FdoProvider fdoProvider =
+        CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext);
 
     // Add headers to compilation step.
     final CcCommon common = new CcCommon(ruleContext);
     CompilationInfo compilationInfo =
         new CcCompilationHelper(
-                ruleContext, semantics, featureConfiguration, ccToolchain, fdoSupport)
+                ruleContext, semantics, featureConfiguration, ccToolchain, fdoProvider)
             .addPublicHeaders(common.getHeaders())
             .setHeadersCheckingMode(HeadersCheckingMode.STRICT)
             .compile();
@@ -99,7 +99,7 @@
             semantics,
             featureConfiguration,
             ccToolchain,
-            fdoSupport,
+            fdoProvider,
             ruleContext.getConfiguration());
 
     if (staticLibrary != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
index 319f7d8..46c1678 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
@@ -109,7 +109,7 @@
       ruleContext.initConfigurationMakeVariableContext(new CcFlagsSupplier(ruleContext));
     }
 
-    FdoSupportProvider fdoSupport = common.getFdoSupport();
+    FdoProvider fdoProvider = common.getFdoProvider();
     FeatureConfiguration featureConfiguration =
         CcCommon.configureFeaturesOrReportRuleError(ruleContext, ccToolchain);
     PrecompiledFiles precompiledFiles = new PrecompiledFiles(ruleContext);
@@ -121,7 +121,7 @@
 
     CcCompilationHelper compilationHelper =
         new CcCompilationHelper(
-                ruleContext, semantics, featureConfiguration, ccToolchain, fdoSupport)
+                ruleContext, semantics, featureConfiguration, ccToolchain, fdoProvider)
             .fromCommon(common, additionalCopts)
             .addSources(common.getSources())
             .addPrivateHeaders(common.getPrivateHeaders())
@@ -135,7 +135,7 @@
                 semantics,
                 featureConfiguration,
                 ccToolchain,
-                fdoSupport,
+                fdoProvider,
                 ruleContext.getConfiguration())
             .fromCommon(common)
             .addLinkopts(common.getLinkopts())
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
index 34aac7f..ba6907f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingHelper.java
@@ -175,7 +175,7 @@
 
   private final FeatureConfiguration featureConfiguration;
   private final CcToolchainProvider ccToolchain;
-  private final FdoSupportProvider fdoSupport;
+  private final FdoProvider fdoProvider;
   private String linkedArtifactNameSuffix = "";
 
   /**
@@ -185,7 +185,7 @@
    * @param semantics CppSemantics for the build
    * @param featureConfiguration activated features and action configs for the build
    * @param ccToolchain the C++ toolchain provider for the build
-   * @param fdoSupport the C++ FDO optimization support provider for the build
+   * @param fdoProvider the C++ FDO optimization support provider for the build
    * @param configuration the configuration that gives the directory of output artifacts
    */
   public CcLinkingHelper(
@@ -193,13 +193,13 @@
       CppSemantics semantics,
       FeatureConfiguration featureConfiguration,
       CcToolchainProvider ccToolchain,
-      FdoSupportProvider fdoSupport,
+      FdoProvider fdoProvider,
       BuildConfiguration configuration) {
     this.ruleContext = Preconditions.checkNotNull(ruleContext);
     this.semantics = Preconditions.checkNotNull(semantics);
     this.featureConfiguration = Preconditions.checkNotNull(featureConfiguration);
     this.ccToolchain = Preconditions.checkNotNull(ccToolchain);
-    this.fdoSupport = Preconditions.checkNotNull(fdoSupport);
+    this.fdoProvider = Preconditions.checkNotNull(fdoProvider);
     this.configuration = Preconditions.checkNotNull(configuration);
     this.cppConfiguration =
         Preconditions.checkNotNull(ruleContext.getFragment(CppConfiguration.class));
@@ -973,7 +973,7 @@
 
   private CppLinkActionBuilder newLinkActionBuilder(Artifact outputArtifact) {
     return new CppLinkActionBuilder(
-            ruleContext, outputArtifact, ccToolchain, fdoSupport, featureConfiguration, semantics)
+            ruleContext, outputArtifact, ccToolchain, fdoProvider, featureConfiguration, semantics)
         .setCrosstoolInputs(ccToolchain.getLink());
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
index f37e897..1fc0fe2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
@@ -259,7 +259,7 @@
         /* interfaceLibraryOutput= */ null,
         /* ltoOutputRootPrefix= */ null,
         convertFromNoneable(defFile, /* defaultValue= */ null),
-        /* fdoSupport= */ null,
+        /* fdoProvider= */ null,
         asStringNestedSet(runtimeLibrarySearchDirectories),
         /* librariesToLink= */ null,
         asStringNestedSet(librarySearchDirectories),
@@ -418,8 +418,8 @@
         convertFromNoneable(skylarkFeatureConfiguration, null);
     Pair<List<Artifact>, List<Artifact>> separatedHeadersAndSources =
         separateSourcesFromHeaders(sources);
-    FdoSupportProvider fdoSupport =
-        CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
+    FdoProvider fdoProvider =
+        CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext);
     // TODO(plf): Need to flatten the nested set to convert the Strings to PathFragment. This could
     // be avoided if path fragments are ever added to Skylark or in the C++ code we take Strings
     // instead of PathFragments.
@@ -431,7 +431,7 @@
                 featureConfiguration,
                 CcCompilationHelper.SourceCategory.CC,
                 ccToolchainProvider,
-                fdoSupport)
+                fdoProvider)
             .addPublicHeaders(headers)
             .addIncludeDirs(
                 includeDirs
@@ -497,8 +497,8 @@
     CcToolchainProvider ccToolchainProvider = convertFromNoneable(skylarkCcToolchainProvider, null);
     FeatureConfiguration featureConfiguration =
         convertFromNoneable(skylarkFeatureConfiguration, null);
-    FdoSupportProvider fdoSupport =
-        CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
+    FdoProvider fdoProvider =
+        CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext);
     NestedSet<String> linkopts =
         convertSkylarkListOrNestedSetToNestedSet(skylarkLinkopts, String.class);
     CcLinkingHelper helper =
@@ -507,7 +507,7 @@
                 cppSemantics,
                 featureConfiguration,
                 ccToolchainProvider,
-                fdoSupport,
+                fdoProvider,
                 ruleContext.getConfiguration())
             .addLinkopts(linkopts)
             .setShouldCreateStaticLibraries(shouldCreateStaticLibraries)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
index 3d68b2d..d10135f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
@@ -54,7 +54,7 @@
 import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.packages.License;
 import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
-import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider.FdoMode;
 import com.google.devtools.build.lib.syntax.Type;
 import com.google.devtools.build.lib.util.FileType;
 import com.google.devtools.build.lib.util.Pair;
@@ -529,12 +529,12 @@
     if (fdoMode == FdoMode.LLVM_FDO) {
       profileArtifact =
           convertLLVMRawProfileToIndexed(
-              fdoSupport.getFdoSupport().getFdoProfile().asFragment(), toolchainInfo, ruleContext);
+              fdoSupport.getFdoProfile().asFragment(), toolchainInfo, ruleContext);
       if (ruleContext.hasErrors()) {
         return null;
       }
     } else if (fdoMode == FdoMode.AUTO_FDO || fdoMode == FdoMode.XBINARY_FDO) {
-      Path fdoProfile = fdoSupport.getFdoSupport().getFdoProfile();
+      Path fdoProfile = fdoSupport.getFdoProfile();
       profileArtifact = ruleContext.getUniqueDirectoryArtifact(
               "fdo",
               fdoProfile.getBaseName(),
@@ -597,8 +597,8 @@
         new RuleConfiguredTargetBuilder(ruleContext)
             .addNativeDeclaredProvider(ccProvider)
             .addNativeDeclaredProvider(templateVariableInfo)
-            .addProvider(new FdoSupportProvider(
-                fdoSupport.getFdoSupport(), fdoMode, cppConfiguration.getFdoInstrument(),
+            .addProvider(new FdoProvider(
+                fdoSupport.getFdoProfile(), fdoMode, cppConfiguration.getFdoInstrument(),
                 profileArtifact, prefetchHintsArtifact))
             .setFilesToBuild(crosstool)
             .addProvider(RunfilesProvider.simple(Runfiles.EMPTY));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
index c702eae..5ac50d3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java
@@ -30,7 +30,7 @@
 import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
 import com.google.devtools.build.lib.rules.cpp.CppConfiguration.Tool;
-import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider.FdoMode;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcToolchainProviderApi;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index c0b4502..e8ccf33 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -57,7 +57,7 @@
 import com.google.devtools.build.lib.packages.RuleErrorConsumer;
 import com.google.devtools.build.lib.rules.cpp.CcLinkParams.Linkstamp;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
-import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider.FdoMode;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
 import com.google.devtools.build.lib.shell.ShellUtils;
 import com.google.devtools.build.lib.syntax.Type;
@@ -248,22 +248,22 @@
   }
 
   /**
-   * Return {@link FdoSupportProvider} using default cc_toolchain attribute name.
+   * Return {@link FdoProvider} using default cc_toolchain attribute name.
    *
    * <p>Be careful to provide explicit attribute name if the rule doesn't store cc_toolchain under
    * the default name.
    */
   @Nullable
-  public static FdoSupportProvider getFdoSupportUsingDefaultCcToolchainAttribute(
+  public static FdoProvider getFdoProviderUsingDefaultCcToolchainAttribute(
       RuleContext ruleContext) {
-    return getFdoSupport(ruleContext, CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME);
+    return getFdoProvider(ruleContext, CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME);
   }
 
-  @Nullable public static FdoSupportProvider getFdoSupport(RuleContext ruleContext,
+  @Nullable public static FdoProvider getFdoProvider(RuleContext ruleContext,
       String ccToolchainAttribute) {
     return ruleContext
         .getPrerequisite(ccToolchainAttribute, Mode.TARGET)
-        .getProvider(FdoSupportProvider.class);
+        .getProvider(FdoProvider.class);
   }
 
   public static NestedSet<Pair<String, String>> getCoverageEnvironmentIfNeeded(
@@ -632,15 +632,15 @@
   /**
    * Returns the FDO build subtype.
    */
-  public static String getFdoBuildStamp(RuleContext ruleContext, FdoSupportProvider fdoSupport) {
+  public static String getFdoBuildStamp(RuleContext ruleContext, FdoProvider fdoProvider) {
     CppConfiguration cppConfiguration = ruleContext.getFragment(CppConfiguration.class);
-    if (fdoSupport.getFdoMode() == FdoMode.AUTO_FDO) {
+    if (fdoProvider.getFdoMode() == FdoMode.AUTO_FDO) {
       return "AFDO";
     }
     if (cppConfiguration.isFdo()) {
       return "FDO";
     }
-    if (fdoSupport.getFdoMode() == FdoMode.XBINARY_FDO) {
+    if (fdoProvider.getFdoMode() == FdoMode.XBINARY_FDO) {
       return "XFDO";
     }
     return null;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
index 23796ff..f0627c0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionBuilder.java
@@ -98,7 +98,7 @@
 
   // can be null for CppLinkAction.createTestBuilder()
   @Nullable private final CcToolchainProvider toolchain;
-  private final FdoSupportProvider fdoSupport;
+  private final FdoProvider fdoProvider;
   private Artifact interfaceOutput;
   private Artifact symbolCounts;
   /** Directory where toolchain stores language-runtime libraries (libstdc++, libc++ ...) */
@@ -148,14 +148,14 @@
    * @param ruleContext the rule that owns the action
    * @param output the output artifact
    * @param toolchain the C++ toolchain provider
-   * @param fdoSupport the C++ FDO optimization support
+   * @param fdoProvider the C++ FDO optimization support
    * @param cppSemantics to be used for linkstamp compiles
    */
   public CppLinkActionBuilder(
       RuleContext ruleContext,
       Artifact output,
       CcToolchainProvider toolchain,
-      FdoSupportProvider fdoSupport,
+      FdoProvider fdoProvider,
       FeatureConfiguration featureConfiguration,
       CppSemantics cppSemantics) {
     this(
@@ -164,7 +164,7 @@
         ruleContext.getConfiguration(),
         ruleContext.getAnalysisEnvironment(),
         toolchain,
-        fdoSupport,
+        fdoProvider,
         featureConfiguration,
         cppSemantics);
   }
@@ -176,7 +176,7 @@
    * @param output the output artifact
    * @param configuration build configuration
    * @param toolchain C++ toolchain provider
-   * @param fdoSupport the C++ FDO optimization support
+   * @param fdoProvider the C++ FDO optimization support
    * @param cppSemantics to be used for linkstamp compiles
    */
   public CppLinkActionBuilder(
@@ -184,7 +184,7 @@
       Artifact output,
       BuildConfiguration configuration,
       CcToolchainProvider toolchain,
-      FdoSupportProvider fdoSupport,
+      FdoProvider fdoProvider,
       FeatureConfiguration featureConfiguration,
       CppSemantics cppSemantics) {
     this(
@@ -193,7 +193,7 @@
         configuration,
         ruleContext.getAnalysisEnvironment(),
         toolchain,
-        fdoSupport,
+        fdoProvider,
         featureConfiguration,
         cppSemantics);
   }
@@ -206,7 +206,7 @@
    * @param configuration the configuration used to determine the tool chain and the default link
    *     options
    * @param toolchain the C++ toolchain provider
-   * @param fdoSupport the C++ FDO optimization support
+   * @param fdoProvider the C++ FDO optimization support
    * @param cppSemantics to be used for linkstamp compiles
    */
   private CppLinkActionBuilder(
@@ -215,7 +215,7 @@
       BuildConfiguration configuration,
       AnalysisEnvironment analysisEnvironment,
       CcToolchainProvider toolchain,
-      FdoSupportProvider fdoSupport,
+      FdoProvider fdoProvider,
       FeatureConfiguration featureConfiguration,
       CppSemantics cppSemantics) {
     this.ruleContext = ruleContext;
@@ -224,7 +224,7 @@
     this.configuration = Preconditions.checkNotNull(configuration);
     this.cppConfiguration = configuration.getFragment(CppConfiguration.class);
     this.toolchain = toolchain;
-    this.fdoSupport = fdoSupport;
+    this.fdoProvider = fdoProvider;
     if (featureConfiguration.isEnabled(CppRuleClasses.STATIC_LINK_CPP_RUNTIMES)) {
       toolchainLibrariesSolibDir = toolchain.getDynamicRuntimeSolibDir();
     }
@@ -241,7 +241,7 @@
    * @param linkContext an immutable CppLinkAction.Context from the original builder
    * @param configuration build configuration
    * @param toolchain the C++ toolchain provider
-   * @param fdoSupport the C++ FDO optimization support
+   * @param fdoProvider the C++ FDO optimization support
    * @param cppSemantics to be used for linkstamp compiles
    */
   public CppLinkActionBuilder(
@@ -250,7 +250,7 @@
       Context linkContext,
       BuildConfiguration configuration,
       CcToolchainProvider toolchain,
-      FdoSupportProvider fdoSupport,
+      FdoProvider fdoProvider,
       FeatureConfiguration featureConfiguration,
       CppSemantics cppSemantics) {
     // These Builder-only fields get set in the constructor:
@@ -261,7 +261,7 @@
         configuration,
         ruleContext.getAnalysisEnvironment(),
         toolchain,
-        fdoSupport,
+        fdoProvider,
         featureConfiguration,
         cppSemantics);
     Preconditions.checkNotNull(linkContext);
@@ -486,7 +486,7 @@
                 SHAREABLE_LINK_ARTIFACT_FACTORY,
                 featureConfiguration,
                 toolchain,
-                fdoSupport,
+            fdoProvider,
                 usePicForLtoBackendActions,
                 toolchain.shouldCreatePerObjectDebugInfo(featureConfiguration),
                 argv)
@@ -499,7 +499,7 @@
                 linkArtifactFactory,
                 featureConfiguration,
                 toolchain,
-                fdoSupport,
+                fdoProvider,
                 usePicForLtoBackendActions,
                 toolchain.shouldCreatePerObjectDebugInfo(featureConfiguration),
                 argv);
@@ -956,7 +956,7 @@
               interfaceOutput != null ? interfaceOutput.getExecPathString() : null,
               ltoOutputRootPrefix,
               defFile != null ? defFile.getExecPathString() : null,
-              fdoSupport,
+              fdoProvider,
               collectedLibrariesToLink.getRuntimeLibrarySearchDirectories(),
               collectedLibrariesToLink.getLibrariesToLink(),
               collectedLibrariesToLink.getLibrarySearchDirectories(),
@@ -1097,7 +1097,7 @@
                 toolchain,
                 configuration.isCodeCoverageEnabled(),
                 cppConfiguration,
-                CppHelper.getFdoBuildStamp(ruleContext, fdoSupport),
+                CppHelper.getFdoBuildStamp(ruleContext, fdoProvider),
                 featureConfiguration,
                 cppConfiguration.forcePic()
                     || (linkType.isDynamicLibrary() && toolchain.toolchainNeedsPic()),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProfileProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProfileProvider.java
index 876d164..6ec40dd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProfileProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProfileProvider.java
@@ -20,6 +20,7 @@
 /** Provider that contains the profile used for FDO. */
 @Immutable
 public final class FdoProfileProvider extends NativeInfo {
+
   public static final NativeProvider<FdoProfileProvider> PROVIDER =
       new NativeProvider<FdoProfileProvider>(FdoProfileProvider.class, "FdoProfileInfo") {};
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProvider.java
new file mode 100644
index 0000000..63e1ce2
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoProvider.java
@@ -0,0 +1,98 @@
+// Copyright 2014 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.rules.cpp;
+
+import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.vfs.Path;
+
+/**
+ * A {@link TransitiveInfoProvider} that describes how C++ FDO compilation should be done.
+ *
+ * <p><b>The {@code fdoProfilePath} member was a mistake. DO NOT USE IT FOR ANYTHING!</b>
+ */
+@Immutable
+@AutoCodec
+public class FdoProvider implements TransitiveInfoProvider {
+  /**
+   * The FDO mode we are operating in.
+   */
+  public enum FdoMode {
+    /** FDO is turned off. */
+    OFF,
+
+    /** FDO based on automatically collected data. */
+    AUTO_FDO,
+
+    /** FDO based on cross binary collected data. */
+    XBINARY_FDO,
+
+    /** Instrumentation-based FDO implemented on LLVM. */
+    LLVM_FDO,
+  }
+
+  /** <b>DO NOT EVER USE PATHS IN THE ANALYSIS PHASE!
+   *
+   * <p>This is buggy and incorrect because Bazel cannot track file system accesses done through
+   * raw file system objects like {@link Path} (as opposed to going through Skyframe). This is
+   * bad code, it was a mistake to submit it in the first place and will go away at the first
+   * opportunity we get.
+   */
+  @Deprecated
+  private final Path fdoProfilePath;
+  private final FdoMode fdoMode;
+  private final String fdoInstrument;
+  private final Artifact profileArtifact;
+  private final Artifact prefetchHintsArtifact;
+
+  @AutoCodec.Instantiator
+  public FdoProvider(Path fdoProfilePath, FdoMode fdoMode, String fdoInstrument,
+      Artifact profileArtifact, Artifact prefetchHintsArtifact) {
+    this.fdoProfilePath = fdoProfilePath;
+    this.fdoMode = fdoMode;
+    this.fdoInstrument = fdoInstrument;
+    this.profileArtifact = profileArtifact;
+    this.prefetchHintsArtifact = prefetchHintsArtifact;
+  }
+
+  /** <b>DO NOT EVER USE PATHS IN THE ANALYSIS PHASE!
+   *
+   * <p>This is buggy and incorrect because Bazel cannot track file system accesses done through
+   * raw file system objects like {@link Path} (as opposed to going through Skyframe). This is
+   * bad code, it was a mistake to submit it in the first place and will go away at the first
+   * opportunity we get.
+   */
+  @Deprecated
+  public Path getFdoProfilePath() {
+    return fdoProfilePath;
+  }
+
+  public String getFdoInstrument() {
+    return fdoInstrument;
+  }
+
+  public FdoMode getFdoMode() {
+    return fdoMode;
+  }
+
+  public Artifact getProfileArtifact() {
+    return profileArtifact;
+  }
+
+  public Artifact getPrefetchHintsArtifact() {
+    return prefetchHintsArtifact;
+  }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java
deleted file mode 100644
index 6c89bc2..0000000
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupport.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.rules.cpp;
-
-import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
-import com.google.devtools.build.lib.vfs.Path;
-import com.google.devtools.build.skyframe.SkyFunction;
-
-/**
- * A container for the path to the FDO profile.
- *
- * <p>{@link FdoSupport} is created from {@link FdoSupportFunction} (a {@link SkyFunction}),
- * which is requested from Skyframe by the {@code cc_toolchain} rule. It's done this way because
- * the path depends on both a command line argument and the location of the workspace and the latter
- * is not available either during configuration creation or during the analysis phase.
- */
-@Immutable
-@AutoCodec
-public final class FdoSupport {
-  /**
-   * The FDO mode we are operating in.
-   */
-  public enum FdoMode {
-    /** FDO is turned off. */
-    OFF,
-
-    /** FDO based on automatically collected data. */
-    AUTO_FDO,
-
-    /** FDO based on cross binary collected data. */
-    XBINARY_FDO,
-
-    /** Instrumentation-based FDO implemented on LLVM. */
-    LLVM_FDO,
-  }
-
-  /**
-   * Path of the profile file passed to {@code --fdo_optimize}
-   */
-  // TODO(lberki): This should be a PathFragment.
-  // Except that CcProtoProfileProvider#getProfile() calls #exists() on it, which is ridiculously
-  // incorrect.
-  private final Path fdoProfile;
-
-  /**
-   * Creates an FDO support object.
-   *
-   * @param fdoProfile path to the profile file passed to --fdo_optimize option
-   */
-  @VisibleForSerialization
-  @AutoCodec.Instantiator
-  FdoSupport(Path fdoProfile) {
-    this.fdoProfile = fdoProfile;
-  }
-
-  public Path getFdoProfile() {
-    return fdoProfile;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportFunction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportFunction.java
index add8ebc..2c58ce6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportFunction.java
@@ -22,7 +22,8 @@
 import javax.annotation.Nullable;
 
 /**
- * Wrapper for {@link FdoSupport} that turns it into a {@link SkyFunction}.
+ * A {@link SkyFunction} that does things for FDO that a regular configured target is not allowed
+ * to.
  *
  * <p>This only exists because the value of {@code --fdo_optimize} can be a workspace-relative path
  * and thus we need to depend on {@link BlazeDirectories} somehow, which neither the configuration
@@ -47,10 +48,9 @@
   @Override
   public SkyValue compute(SkyKey skyKey, Environment env) throws InterruptedException {
     FdoSupportValue.Key key = (FdoSupportValue.Key) skyKey.argument();
-    Path fdoZip =
-        key.getFdoZip() == null ? null : directories.getWorkspace().getRelative(key.getFdoZip());
-    FdoSupport fdoSupport = new FdoSupport(fdoZip);
-    return new FdoSupportValue(fdoSupport);
+    Path resolvedFdoProfile = key.getFdoProfileArgument() == null
+        ? null : directories.getWorkspace().getRelative(key.getFdoProfileArgument());
+    return new FdoSupportValue(resolvedFdoProfile);
   }
 
   @Nullable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportProvider.java
deleted file mode 100644
index f24de65..0000000
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportProvider.java
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.lib.rules.cpp;
-
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
-import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-
-/**
- * A {@link TransitiveInfoProvider} so that {@code cc_toolchain} can pass {@link FdoSupport} to the
- * C++ rules.
- */
-@Immutable
-@AutoCodec
-public class FdoSupportProvider implements TransitiveInfoProvider {
-  private final FdoSupport fdoSupport;
-  private final FdoMode fdoMode;
-  private final String fdoInstrument;
-  private final Artifact profileArtifact;
-  private final Artifact prefetchHintsArtifact;
-
-  @AutoCodec.Instantiator
-  public FdoSupportProvider(FdoSupport fdoSupport, FdoMode fdoMode, String fdoInstrument,
-      Artifact profileArtifact, Artifact prefetchHintsArtifact) {
-    this.fdoSupport = fdoSupport;
-    this.fdoMode = fdoMode;
-    this.fdoInstrument = fdoInstrument;
-    this.profileArtifact = profileArtifact;
-    this.prefetchHintsArtifact = prefetchHintsArtifact;
-  }
-
-  public FdoSupport getFdoSupport() {
-    return fdoSupport;
-  }
-
-  public String getFdoInstrument() {
-    return fdoInstrument;
-  }
-
-  public FdoMode getFdoMode() {
-    return fdoMode;
-  }
-
-  public Artifact getProfileArtifact() {
-    return profileArtifact;
-  }
-
-  public Artifact getPrefetchHintsArtifact() {
-    return prefetchHintsArtifact;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportValue.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportValue.java
index e9dc6c3..f516a19 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportValue.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoSupportValue.java
@@ -17,14 +17,21 @@
 import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
+import com.google.devtools.build.skyframe.SkyFunction;
 import com.google.devtools.build.skyframe.SkyFunctionName;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
 import java.util.Objects;
 
 /**
- * Wrapper for {@link FdoSupport}.
+ * A container for the path to the FDO profile.
+ *
+ * <p>{@link FdoSupportValue} is created from {@link FdoSupportFunction} (a {@link SkyFunction}),
+ * which is requested from Skyframe by the {@code cc_toolchain} rule. It's done this way because
+ * the path depends on both a command line argument and the location of the workspace and the latter
+ * is not available either during configuration creation or during the analysis phase.
  */
 @AutoCodec
 @Immutable
@@ -37,20 +44,20 @@
   public static class Key implements SkyKey {
     private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
 
-    private final PathFragment fdoZip;
+    private final PathFragment fdoProfileArgument;
 
-    private Key(PathFragment fdoZip) {
-      this.fdoZip = fdoZip;
+    private Key(PathFragment fdoProfileArgument) {
+      this.fdoProfileArgument = fdoProfileArgument;
     }
 
     @AutoCodec.Instantiator
     @AutoCodec.VisibleForSerialization
-    static Key of(PathFragment fdoZip) {
-      return interner.intern(new Key(fdoZip));
+    static Key of(PathFragment fdoProfileArgument) {
+      return interner.intern(new Key(fdoProfileArgument));
     }
 
-    public PathFragment getFdoZip() {
-      return fdoZip;
+    public PathFragment getFdoProfileArgument() {
+      return fdoProfileArgument;
     }
 
     @Override
@@ -64,12 +71,12 @@
       }
 
       Key that = (Key) o;
-      return Objects.equals(this.fdoZip, that.fdoZip);
+      return Objects.equals(this.fdoProfileArgument, that.fdoProfileArgument);
     }
 
     @Override
     public int hashCode() {
-      return Objects.hash(fdoZip);
+      return Objects.hash(fdoProfileArgument);
     }
 
     @Override
@@ -78,17 +85,23 @@
     }
   }
 
-  private final FdoSupport fdoSupport;
+  /**
+   * Path of the profile file passed to {@code --fdo_optimize}
+   */
+  // TODO(lberki): This should be a PathFragment.
+  // Except that CcProtoProfileProvider#getProfile() calls #exists() on it, which is ridiculously
+  // incorrect.
+  private final Path fdoProfile;
 
-  FdoSupportValue(FdoSupport fdoSupport) {
-    this.fdoSupport = fdoSupport;
+  FdoSupportValue(Path fdoProfile) {
+    this.fdoProfile = fdoProfile;
   }
 
-  public FdoSupport getFdoSupport() {
-    return fdoSupport;
+  public Path getFdoProfile() {
+    return fdoProfile;
   }
 
-  public static SkyKey key(PathFragment fdoZip) {
-    return Key.of(fdoZip);
+  public static SkyKey key(PathFragment fdoProfileArgument) {
+    return Key.of(fdoProfileArgument);
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java
index e89274d..69d112d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkBuildVariables.java
@@ -112,7 +112,7 @@
       String interfaceLibraryOutput,
       PathFragment ltoOutputRootPrefix,
       String defFile,
-      FdoSupportProvider fdoSupport,
+      FdoProvider fdoProvider,
       Iterable<String> runtimeLibrarySearchDirectories,
       SequenceBuilder librariesToLink,
       Iterable<String> librarySearchDirectories,
@@ -234,7 +234,7 @@
     }
 
     if (featureConfiguration.isEnabled(CppRuleClasses.FDO_INSTRUMENT)) {
-      buildVariables.addStringVariable("fdo_instrument_path", fdoSupport.getFdoInstrument());
+      buildVariables.addStringVariable("fdo_instrument_path", fdoProvider.getFdoInstrument());
     }
 
     Iterable<String> userLinkFlagsWithLtoIndexingIfNeeded;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendArtifacts.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendArtifacts.java
index 39a37f2..7af6b65 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendArtifacts.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendArtifacts.java
@@ -95,7 +95,7 @@
       CppLinkAction.LinkArtifactFactory linkArtifactFactory,
       FeatureConfiguration featureConfiguration,
       CcToolchainProvider ccToolchain,
-      FdoSupportProvider fdoSupport,
+      FdoProvider fdoProvider,
       boolean usePic,
       boolean generateDwo,
       List<String> commandLine) {
@@ -112,7 +112,7 @@
         ruleContext,
         featureConfiguration,
         ccToolchain,
-        fdoSupport,
+        fdoProvider,
         usePic,
         generateDwo,
         configuration,
@@ -130,7 +130,7 @@
       CppLinkAction.LinkArtifactFactory linkArtifactFactory,
       FeatureConfiguration featureConfiguration,
       CcToolchainProvider ccToolchain,
-      FdoSupportProvider fdoSupport,
+      FdoProvider fdoProvider,
       boolean usePic,
       boolean generateDwo,
       List<String> commandLine) {
@@ -145,7 +145,7 @@
         ruleContext,
         featureConfiguration,
         ccToolchain,
-        fdoSupport,
+        fdoProvider,
         usePic,
         generateDwo,
         configuration,
@@ -181,7 +181,7 @@
       RuleContext ruleContext,
       FeatureConfiguration featureConfiguration,
       CcToolchainProvider ccToolchain,
-      FdoSupportProvider fdoSupport,
+      FdoProvider fdoProvider,
       boolean usePic,
       boolean generateDwo,
       BuildConfiguration configuration,
@@ -231,7 +231,7 @@
     // The input to the LTO backend step is the bitcode file.
     buildVariablesBuilder.addStringVariable(
         "thinlto_input_bitcode_file", bitcodeFile.getExecPath().toString());
-    addProfileForLtoBackend(builder, fdoSupport, featureConfiguration, buildVariablesBuilder);
+    addProfileForLtoBackend(builder, fdoProvider, featureConfiguration, buildVariablesBuilder);
 
     if (generateDwo) {
       dwoFile =
@@ -268,21 +268,21 @@
   @ThreadSafe
   private static void addProfileForLtoBackend(
       LtoBackendAction.Builder builder,
-      FdoSupportProvider fdoSupportProvider,
+      FdoProvider fdoProvider,
       FeatureConfiguration featureConfiguration,
       CcToolchainVariables.Builder buildVariables) {
-    Artifact prefetch = fdoSupportProvider.getPrefetchHintsArtifact();
+    Artifact prefetch = fdoProvider.getPrefetchHintsArtifact();
     if (prefetch != null) {
       buildVariables.addStringVariable("fdo_prefetch_hints_path", prefetch.getExecPathString());
-      builder.addInput(fdoSupportProvider.getPrefetchHintsArtifact());
+      builder.addInput(fdoProvider.getPrefetchHintsArtifact());
     }
     if (!featureConfiguration.isEnabled(CppRuleClasses.AUTOFDO)
         && !featureConfiguration.isEnabled(CppRuleClasses.XBINARYFDO)) {
       return;
     }
 
-    Artifact profile = fdoSupportProvider.getProfileArtifact();
+    Artifact profile = fdoProvider.getProfileArtifact();
     buildVariables.addStringVariable("fdo_profile_path", profile.getExecPathString());
-    builder.addInput(fdoSupportProvider.getProfileArtifact());
+    builder.addInput(fdoProvider.getProfileArtifact());
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
index 83d0c7d..95438a4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java
@@ -243,7 +243,7 @@
               cppSemantics,
               featureConfiguration,
               ccToolchain(ruleContext),
-              CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext));
+              CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext));
       TransitiveInfoCollection runtime = getProtoToolchainProvider().runtime();
       if (runtime != null) {
         helper.addDeps(ImmutableList.of(runtime));
@@ -263,7 +263,7 @@
                   cppSemantics,
                   featureConfiguration,
                   ccToolchain(ruleContext),
-                  CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext),
+                  CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext),
                   ruleContext.getConfiguration())
               .enableCcNativeLibrariesProvider();
       TransitiveInfoCollection runtime = getProtoToolchainProvider().runtime();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
index 8d0425e..89e8c48 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java
@@ -39,7 +39,7 @@
 import com.google.devtools.build.lib.rules.cpp.CppLinkActionBuilder;
 import com.google.devtools.build.lib.rules.cpp.CppRuleClasses;
 import com.google.devtools.build.lib.rules.cpp.CppSemantics;
-import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider;
 import com.google.devtools.build.lib.rules.cpp.Link;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
@@ -216,8 +216,8 @@
     } else {
       sharedLibrary = nativeDeps;
     }
-    FdoSupportProvider fdoSupport =
-        CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
+    FdoProvider fdoProvider =
+        CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext);
     FeatureConfiguration featureConfiguration =
         CcCommon.configureFeaturesOrReportRuleError(
             ruleContext,
@@ -233,7 +233,7 @@
             sharedLibrary,
             configuration,
             toolchain,
-            fdoSupport,
+            fdoProvider,
             featureConfiguration,
             cppSemantics);
     if (useDynamicRuntime) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
index 1ed359b..c321398 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibrary.java
@@ -161,7 +161,7 @@
               objcProvider,
               intermediateArtifacts.strippedSingleArchitectureLibrary(),
               childConfigurationsAndToolchains.get(childConfig),
-              CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext))
+              CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext))
           .validateAttributes();
       ruleContext.assertNoErrors();
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index 5ef84ab..005b5dc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -109,7 +109,7 @@
 import com.google.devtools.build.lib.rules.cpp.CppModuleMap;
 import com.google.devtools.build.lib.rules.cpp.CppModuleMapAction;
 import com.google.devtools.build.lib.rules.cpp.CppRuleClasses;
-import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider;
 import com.google.devtools.build.lib.rules.cpp.IncludeProcessing;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
@@ -300,7 +300,7 @@
       VariablesExtension extension,
       ExtraCompileArgs extraCompileArgs,
       CcToolchainProvider ccToolchain,
-      FdoSupportProvider fdoSupport,
+      FdoProvider fdoProvider,
       Iterable<PathFragment> priorityHeaders,
       PrecompiledFiles precompiledFiles,
       Collection<Artifact> sources,
@@ -319,7 +319,7 @@
                 getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration, objcProvider),
                 CcCompilationHelper.SourceCategory.CC_AND_OBJC,
                 ccToolchain,
-                fdoSupport,
+                fdoProvider,
                 buildConfiguration)
             .addSources(sources)
             .addPrivateHeaders(privateHdrs)
@@ -369,7 +369,7 @@
           ObjcVariablesExtension.Builder extensionBuilder,
           ExtraCompileArgs extraCompileArgs,
           CcToolchainProvider ccToolchain,
-          FdoSupportProvider fdoSupport,
+          FdoProvider fdoProvider,
           Iterable<PathFragment> priorityHeaders,
           LinkTargetType linkType,
           Artifact linkActionInput)
@@ -398,7 +398,7 @@
             extensionBuilder.build(),
             extraCompileArgs,
             ccToolchain,
-            fdoSupport,
+            fdoProvider,
             priorityHeaders,
             precompiledFiles,
             arcSources,
@@ -417,7 +417,7 @@
             extensionBuilder.build(),
             extraCompileArgs,
             ccToolchain,
-            fdoSupport,
+            fdoProvider,
             priorityHeaders,
             precompiledFiles,
             nonArcSources,
@@ -434,7 +434,7 @@
                 semantics,
                 getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration, objcProvider),
                 ccToolchain,
-                fdoSupport,
+                fdoProvider,
                 buildConfiguration)
             .addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET))
             .setLinkedArtifactNameSuffix(intermediateArtifacts.archiveFileNameSuffix())
@@ -960,7 +960,7 @@
         ExtraCompileArgs.NONE,
         ImmutableList.<PathFragment>of(),
         toolchain,
-        maybeGetFdoSupport());
+        maybeGetFdoProvider());
   }
 
   /**
@@ -998,7 +998,7 @@
    * @param extraCompileArgs args to be added to compile actions
    * @param priorityHeaders priority headers to be included before the dependency headers
    * @param ccToolchain the cpp toolchain provider, may be null
-   * @param fdoSupport the cpp FDO support provider, may be null
+   * @param fdoProvider the cpp FDO support provider, may be null
    * @return this compilation support
    * @throws RuleErrorException for invalid crosstool files
    */
@@ -1008,10 +1008,10 @@
       ExtraCompileArgs extraCompileArgs,
       Iterable<PathFragment> priorityHeaders,
       @Nullable CcToolchainProvider ccToolchain,
-      @Nullable FdoSupportProvider fdoSupport)
+      @Nullable FdoProvider fdoProvider)
       throws RuleErrorException, InterruptedException {
     Preconditions.checkNotNull(ccToolchain);
-    Preconditions.checkNotNull(fdoSupport);
+    Preconditions.checkNotNull(fdoProvider);
     ObjcVariablesExtension.Builder extension =
         new ObjcVariablesExtension.Builder()
             .setRuleContext(ruleContext)
@@ -1034,7 +1034,7 @@
               extension,
               extraCompileArgs,
               ccToolchain,
-              fdoSupport,
+              fdoProvider,
               priorityHeaders,
               LinkTargetType.OBJC_ARCHIVE,
               objList);
@@ -1050,7 +1050,7 @@
               extension,
               extraCompileArgs,
               ccToolchain,
-              fdoSupport,
+              fdoProvider,
               priorityHeaders,
               /* linkType */ null,
               /* linkActionInput */ null);
@@ -1083,7 +1083,7 @@
           extraCompileArgs,
           priorityHeaders,
           toolchain,
-          maybeGetFdoSupport());
+          maybeGetFdoProvider());
     }
     return this;
   }
@@ -1159,14 +1159,14 @@
             .addVariableCategory(VariableCategory.EXECUTABLE_LINKING_VARIABLES);
 
     Artifact binaryToLink = getBinaryToLink();
-    FdoSupportProvider fdoSupport =
-        CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
+    FdoProvider fdoProvider =
+        CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext);
     CppLinkActionBuilder executableLinkAction =
         new CppLinkActionBuilder(
                 ruleContext,
                 binaryToLink,
                 toolchain,
-                fdoSupport,
+                fdoProvider,
                 getFeatureConfiguration(ruleContext, toolchain, buildConfiguration, objcProvider),
                 createObjcCppSemantics(
                     objcProvider, /* privateHdrs= */ ImmutableList.of(), /* pchHdr= */ null))
@@ -1294,7 +1294,7 @@
    */
   public CompilationSupport registerFullyLinkAction(
       ObjcProvider objcProvider, Artifact outputArchive) throws InterruptedException {
-    return registerFullyLinkAction(objcProvider, outputArchive, toolchain, maybeGetFdoSupport());
+    return registerFullyLinkAction(objcProvider, outputArchive, toolchain, maybeGetFdoProvider());
   }
 
   /**
@@ -1304,17 +1304,17 @@
    * @param objcProvider provides all compiling and linking information to create this artifact
    * @param outputArchive the output artifact for this action
    * @param ccToolchain the cpp toolchain provider, may be null
-   * @param fdoSupport the cpp FDO support provider, may be null
+   * @param fdoProvider the cpp FDO support provider, may be null
    * @return this {@link CompilationSupport} instance
    */
   CompilationSupport registerFullyLinkAction(
       ObjcProvider objcProvider,
       Artifact outputArchive,
       @Nullable CcToolchainProvider ccToolchain,
-      @Nullable FdoSupportProvider fdoSupport)
+      @Nullable FdoProvider fdoProvider)
       throws InterruptedException {
     Preconditions.checkNotNull(ccToolchain);
-    Preconditions.checkNotNull(fdoSupport);
+    Preconditions.checkNotNull(fdoProvider);
     PathFragment labelName = PathFragment.create(ruleContext.getLabel().getName());
     String libraryIdentifier =
         ruleContext
@@ -1335,7 +1335,7 @@
                 ruleContext,
                 outputArchive,
                 ccToolchain,
-                fdoSupport,
+                fdoProvider,
                 getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration, objcProvider),
                 createObjcCppSemantics(
                     objcProvider, /* privateHdrs= */ ImmutableList.of(), /* pchHdr= */ null))
@@ -1863,12 +1863,12 @@
   }
 
   @Nullable
-  private FdoSupportProvider maybeGetFdoSupport() {
+  private FdoProvider maybeGetFdoProvider() {
     // TODO(rduan): Remove this check once all rules are using the crosstool support.
     if (ruleContext
         .attributes()
         .has(CcToolchain.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME, BuildType.LABEL)) {
-      return CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
+      return CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext);
     } else {
       return null;
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index 5caae39..919024a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -59,7 +59,7 @@
 import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
 import com.google.devtools.build.lib.rules.cpp.CppHelper;
 import com.google.devtools.build.lib.rules.cpp.CppRuleClasses;
-import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider;
 import com.google.devtools.build.lib.rules.java.JavaCommon;
 import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider;
 import com.google.devtools.build.lib.rules.java.JavaConfiguration;
@@ -257,8 +257,8 @@
       try {
         CcToolchainProvider ccToolchain =
             CppHelper.getToolchain(ruleContext, ":j2objc_cc_toolchain");
-        FdoSupportProvider fdoSupport =
-            CppHelper.getFdoSupport(ruleContext, ":j2objc_cc_toolchain");
+        FdoProvider fdoProvider =
+            CppHelper.getFdoProvider(ruleContext, ":j2objc_cc_toolchain");
         CompilationSupport compilationSupport =
             new CompilationSupport.Builder()
                 .setRuleContext(ruleContext)
@@ -274,12 +274,12 @@
                 EXTRA_COMPILE_ARGS,
                 ImmutableList.<PathFragment>of(),
                 ccToolchain,
-                fdoSupport)
+                fdoProvider)
             .registerFullyLinkAction(
                 common.getObjcProvider(),
                 ruleContext.getImplicitOutputArtifact(CompilationSupport.FULLY_LINKED_LIB),
                 ccToolchain,
-                fdoSupport);
+                fdoProvider);
       } catch (RuleErrorException e) {
         ruleContext.ruleError(e.getMessage());
       }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java
index 9264059..897d4b2 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderTest.java
@@ -28,7 +28,7 @@
 import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.Order;
-import com.google.devtools.build.lib.rules.cpp.FdoSupport.FdoMode;
+import com.google.devtools.build.lib.rules.cpp.FdoProvider.FdoMode;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig;
 import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath;
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
index cdfe4c2..af79589 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CppLinkActionTest.java
@@ -316,7 +316,7 @@
                         ? dynamicOutputFile
                         : staticOutputFile,
                     CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext),
-                    CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext),
+                    CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext),
                     featureConfiguration,
                     MockCppSemantics.INSTANCE) {};
             if (attributesToFlip.contains(NonStaticAttributes.OUTPUT_FILE)) {
@@ -372,7 +372,7 @@
                         ? staticOutputFile
                         : dynamicOutputFile,
                     CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext),
-                    CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext),
+                    CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext),
                     featureConfiguration,
                     MockCppSemantics.INSTANCE) {};
             builder.setLinkType(
@@ -402,7 +402,7 @@
             ruleContext,
             output,
             CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext),
-            CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext),
+            CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext),
             FeatureConfiguration.EMPTY,
             MockCppSemantics.INSTANCE);
     builder.setLinkType(LinkTargetType.STATIC_LIBRARY);
@@ -496,7 +496,7 @@
                         .getBinDirectory(ruleContext.getRule().getRepository())),
                 ruleContext.getConfiguration(),
                 CppHelper.getToolchainUsingDefaultCcToolchainAttribute(ruleContext),
-                CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext),
+                CppHelper.getFdoProviderUsingDefaultCcToolchainAttribute(ruleContext),
                 featureConfiguration,
                 MockCppSemantics.INSTANCE)
             .addObjectFiles(nonLibraryInputs)