diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java
index 2dad150..e886059 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.bazel.rules.cpp;
 
+import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -109,5 +110,8 @@
   }
 
   @Override
-  public void validateLayeringCheckFeatures(RuleContext ruleContext) {}
+  public void validateLayeringCheckFeatures(
+      RuleContext ruleContext,
+      CcToolchainProvider ccToolchain,
+      ImmutableSet<String> unsupportedFeatures) {}
 }
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 76e209c..dc9b317 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
@@ -833,7 +833,7 @@
       ImmutableSet<String> unsupportedFeatures,
       CcToolchainProvider toolchain,
       CppSemantics cppSemantics) {
-    cppSemantics.validateLayeringCheckFeatures(ruleContext);
+    cppSemantics.validateLayeringCheckFeatures(ruleContext, toolchain, ImmutableSet.of());
     try {
       return configureFeaturesOrThrowEvalException(
           requestedFeatures,
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 1f1a3055..bd21553 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
@@ -159,12 +159,15 @@
     // flipped.
     BuildOptions buildOptions =
         ruleContext == null ? null : ruleContext.getConfiguration().getOptions();
-    getSemantics().validateLayeringCheckFeatures(ruleContext.getRuleContext());
+    ImmutableSet<String> unsupportedFeaturesSet =
+        ImmutableSet.copyOf(unsupportedFeatures.getContents(String.class, "unsupported_features"));
+    getSemantics()
+        .validateLayeringCheckFeatures(
+            ruleContext.getRuleContext(), toolchain, unsupportedFeaturesSet);
     return FeatureConfigurationForStarlark.from(
         CcCommon.configureFeaturesOrThrowEvalException(
             ImmutableSet.copyOf(requestedFeatures.getContents(String.class, "requested_features")),
-            ImmutableSet.copyOf(
-                unsupportedFeatures.getContents(String.class, "unsupported_features")),
+            unsupportedFeaturesSet,
             toolchain,
             cppConfiguration),
         cppConfiguration,
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 cb06563..a9ad796 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
@@ -25,6 +25,7 @@
 import com.google.devtools.build.lib.analysis.RunfilesProvider;
 import com.google.devtools.build.lib.analysis.TemplateVariableInfo;
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
+import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.events.Location;
 import java.io.Serializable;
 import java.util.HashMap;
@@ -42,6 +43,14 @@
   /** Default attribute name for the c++ toolchain type */
   public static final String CC_TOOLCHAIN_TYPE_ATTRIBUTE_NAME = "$cc_toolchain_type";
 
+  public static final String ALLOWED_LAYERING_CHECK_FEATURES_WHITELIST =
+      "disabling_parse_headers_and_layering_check_allowed";
+  public static final String ALLOWED_LAYERING_CHECK_FEATURES_TARGET =
+      "@bazel_tools//tools/build_defs/cc/whitelists/parse_headers_and_layering_check:"
+          + ALLOWED_LAYERING_CHECK_FEATURES_WHITELIST;
+  public static final Label ALLOWED_LAYERING_CHECK_FEATURES_LABEL =
+      Label.parseAbsoluteUnchecked(ALLOWED_LAYERING_CHECK_FEATURES_TARGET);
+
   @Override
   public ConfiguredTarget create(RuleContext ruleContext)
       throws InterruptedException, RuleErrorException, ActionConflictException {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
index 5a5d8b1..b32a168 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainAttributesProvider.java
@@ -26,8 +26,10 @@
 import com.google.devtools.build.lib.analysis.LicensesProvider.TargetLicense;
 import com.google.devtools.build.lib.analysis.LicensesProviderImpl;
 import com.google.devtools.build.lib.analysis.MiddlemanProvider;
+import com.google.devtools.build.lib.analysis.PackageSpecificationProvider;
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
+import com.google.devtools.build.lib.analysis.Whitelist;
 import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
 import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
 import com.google.devtools.build.lib.cmdline.Label;
@@ -97,6 +99,7 @@
   private final Label ccToolchainLabel;
   private final TransitiveInfoCollection staticRuntimeLib;
   private final TransitiveInfoCollection dynamicRuntimeLib;
+  private final PackageSpecificationProvider whitelistForLayeringCheck;
 
   public CcToolchainAttributesProvider(
       RuleContext ruleContext,
@@ -219,6 +222,9 @@
       this.toolchainType = null;
     }
     this.additionalBuildVariablesComputer = additionalBuildVariablesComputer;
+    this.whitelistForLayeringCheck =
+        Whitelist.fetchPackageSpecificationProvider(
+            ruleContext, CcToolchain.ALLOWED_LAYERING_CHECK_FEATURES_WHITELIST);
   }
 
   public String getCpu() {
@@ -406,6 +412,10 @@
     return ifsoBuilder;
   }
 
+  public PackageSpecificationProvider getWhitelistForLayeringCheck() {
+    return whitelistForLayeringCheck;
+  }
+
   private static NestedSet<Artifact> getMiddlemanOrFiles(RuleContext context, String attribute) {
     return getMiddlemanOrFiles(context, attribute, Mode.HOST);
   }
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 168c647..cbb52b9 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
@@ -19,6 +19,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.LicensesProvider;
+import com.google.devtools.build.lib.analysis.PackageSpecificationProvider;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.analysis.platform.ToolchainInfo;
@@ -101,7 +102,8 @@
           /* abi= */ "",
           /* targetSystemName= */ "",
           /* additionalMakeVariables= */ ImmutableMap.of(),
-          /* legacyCcFlagsMakeVariable= */ "");
+          /* legacyCcFlagsMakeVariable= */ "",
+          /* whitelistForLayeringCheck= */ null);
 
   @Nullable private final CppConfiguration cppConfiguration;
   private final PathFragment crosstoolTopPathFragment;
@@ -163,6 +165,7 @@
   private final FdoContext fdoContext;
 
   private final LicensesProvider licensesProvider;
+  private final PackageSpecificationProvider whitelistForLayeringCheck;
 
   public CcToolchainProvider(
       ImmutableMap<String, Object> values,
@@ -217,7 +220,8 @@
       String abi,
       String targetSystemName,
       ImmutableMap<String, String> additionalMakeVariables,
-      String legacyCcFlagsMakeVariable) {
+      String legacyCcFlagsMakeVariable,
+      PackageSpecificationProvider whitelistForLayeringCheck) {
     super(values, Location.BUILTIN);
     this.cppConfiguration = cppConfiguration;
     this.crosstoolTopPathFragment = crosstoolTopPathFragment;
@@ -274,6 +278,7 @@
     this.targetSystemName = targetSystemName;
     this.additionalMakeVariables = additionalMakeVariables;
     this.legacyCcFlagsMakeVariable = legacyCcFlagsMakeVariable;
+    this.whitelistForLayeringCheck = whitelistForLayeringCheck;
   }
 
   /**
@@ -904,5 +909,9 @@
   NestedSet<Artifact> getDynamicRuntimeLibForTesting() {
     return dynamicRuntimeLinkInputs;
   }
+
+  public PackageSpecificationProvider getWhitelistForLayeringCheck() {
+    return whitelistForLayeringCheck;
+  }
 }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
index c0713a6..ae0f1d7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProviderHelper.java
@@ -22,6 +22,7 @@
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.CompilationHelper;
 import com.google.devtools.build.lib.analysis.FileProvider;
+import com.google.devtools.build.lib.analysis.PackageSpecificationProvider;
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -183,6 +184,9 @@
     ImmutableList<PathFragment> builtInIncludeDirectories =
         builtInIncludeDirectoriesBuilder.build();
 
+    PackageSpecificationProvider whitelistForLayeringCheck =
+        attributes.getWhitelistForLayeringCheck();
+
     return new CcToolchainProvider(
         getToolchainForSkylark(toolPaths),
         cppConfiguration,
@@ -244,7 +248,8 @@
         toolchainConfigInfo.getAbiVersion(),
         toolchainConfigInfo.getTargetSystemName(),
         computeAdditionalMakeVariables(toolchainConfigInfo),
-        computeLegacyCcFlagsMakeVariable(toolchainConfigInfo));
+        computeLegacyCcFlagsMakeVariable(toolchainConfigInfo),
+        whitelistForLayeringCheck);
   }
 
   @Nullable
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java
index c63f4f2..1452a37 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java
@@ -26,6 +26,7 @@
 import com.google.devtools.build.lib.analysis.RuleDefinition;
 import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
 import com.google.devtools.build.lib.analysis.TemplateVariableInfo;
+import com.google.devtools.build.lib.analysis.Whitelist;
 import com.google.devtools.build.lib.analysis.config.HostTransition;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.Attribute.LabelLateBoundDefault;
@@ -355,6 +356,10 @@
                 .allowedFileTypes()
                 .mandatoryProviders(CcToolchainConfigInfo.PROVIDER.id())
                 .mandatory())
+        .add(
+            Whitelist.getAttributeFromWhitelistName(
+                    CcToolchain.ALLOWED_LAYERING_CHECK_FEATURES_WHITELIST)
+                .value(CcToolchain.ALLOWED_LAYERING_CHECK_FEATURES_LABEL))
         .build();
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
index a8f4e87..49f8563 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.rules.cpp;
 
+import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -54,5 +55,8 @@
   StructImpl getCcSharedLibraryInfo(TransitiveInfoCollection dep);
 
   /** No-op in Bazel */
-  void validateLayeringCheckFeatures(RuleContext ruleContext);
+  void validateLayeringCheckFeatures(
+      RuleContext ruleContext,
+      CcToolchainProvider ccToolchain,
+      ImmutableSet<String> unsupportedFeatures);
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
index bc0b939..09645b0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
@@ -16,12 +16,14 @@
 
 import static com.google.devtools.build.lib.rules.objc.CompilationSupport.IncludeProcessingType.INCLUDE_SCANNING;
 
+import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.packages.StructImpl;
 import com.google.devtools.build.lib.rules.cpp.CcCompilationContext;
 import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
 import com.google.devtools.build.lib.rules.cpp.CppCompileActionBuilder;
 import com.google.devtools.build.lib.rules.cpp.CppConfiguration.HeadersCheckingMode;
 import com.google.devtools.build.lib.rules.cpp.CppSemantics;
@@ -130,5 +132,8 @@
   }
 
   @Override
-  public void validateLayeringCheckFeatures(RuleContext ruleContext) {}
+  public void validateLayeringCheckFeatures(
+      RuleContext ruleContext,
+      CcToolchainProvider ccToolchain,
+      ImmutableSet<String> unsupportedFeatures) {}
 }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
index f7a4c79..cbae0fa 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/BazelMockCcSupport.java
@@ -54,6 +54,7 @@
     writeMacroFile(config);
     setupRulesCc(config);
     setupCcToolchainConfig(config);
+    createParseHeadersAndLayeringCheckWhitelist(config);
   }
 
   @Override
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
index d898d23..b9d088b 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/MockCcSupport.java
@@ -251,6 +251,17 @@
     config.append(TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/cpp/BUILD", "");
   }
 
+  protected static void createParseHeadersAndLayeringCheckWhitelist(MockToolsConfig config)
+      throws IOException {
+    config.create(
+        TestConstants.TOOLS_REPOSITORY_SCRATCH
+            + "tools/build_defs/cc/whitelists/parse_headers_and_layering_check/BUILD",
+        "package_group(",
+        "    name = 'disabling_parse_headers_and_layering_check_allowed',",
+        "    packages = ['//...']",
+        ")");
+  }
+
   protected String getCrosstoolTopPathForConfig(MockToolsConfig config) {
     if (config.isRealFileSystem()) {
       return getRealFilesystemCrosstoolTopPath();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/MockCppSemantics.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/MockCppSemantics.java
index dce70d9..48f5754 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/MockCppSemantics.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/MockCppSemantics.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.rules.cpp;
 
+import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -68,6 +69,9 @@
   }
 
   @Override
-  public void validateLayeringCheckFeatures(RuleContext ruleContext) {}
+  public void validateLayeringCheckFeatures(
+      RuleContext ruleContext,
+      CcToolchainProvider ccToolchain,
+      ImmutableSet<String> unsupportedFeatures) {}
   ;
 }
diff --git a/tools/build_defs/BUILD b/tools/build_defs/BUILD
index ef350c9..e726001 100644
--- a/tools/build_defs/BUILD
+++ b/tools/build_defs/BUILD
@@ -2,6 +2,7 @@
     name = "srcs",
     srcs = glob(["**"]) + [
         "//tools/build_defs/cc:srcs",
+        "//tools/build_defs/cc/whitelists/parse_headers_and_layering_check:srcs",
         "//tools/build_defs/hash:srcs",
         "//tools/build_defs/pkg:srcs",
         "//tools/build_defs/repo:srcs",
@@ -13,6 +14,7 @@
     name = "embedded_tools",
     srcs = glob(["**"]) + [
         "//tools/build_defs/cc:srcs",
+        "//tools/build_defs/cc/whitelists/parse_headers_and_layering_check:srcs",
         "//tools/build_defs/hash:srcs",
         "//tools/build_defs/pkg:srcs",
         "//tools/build_defs/repo:embedded_tools",
diff --git a/tools/build_defs/cc/whitelists/parse_headers_and_layering_check/BUILD b/tools/build_defs/cc/whitelists/parse_headers_and_layering_check/BUILD
new file mode 100644
index 0000000..b078e2d
--- /dev/null
+++ b/tools/build_defs/cc/whitelists/parse_headers_and_layering_check/BUILD
@@ -0,0 +1,12 @@
+licenses(["notice"])  # Apache 2.0
+
+package_group(
+    name = "disabling_parse_headers_and_layering_check_allowed",
+    packages = [],
+)
+
+filegroup(
+    name = "srcs",
+    srcs = ["BUILD"],
+    visibility = ["//tools/build_defs:__pkg__"],
+)
