morehouse updated this revision to Diff 345210.
morehouse marked 4 inline comments as done.
morehouse added a comment.
Herald added a subscriber: dang.
- Use -mlam option instead of -fsanitize=lam.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D102288/new/
https://reviews.llvm.org/D102288
Files:
clang/include/clang/Driver/Options.td
clang/include/clang/Driver/SanitizerArgs.h
clang/lib/Driver/SanitizerArgs.cpp
clang/lib/Driver/ToolChains/CommonArgs.cpp
compiler-rt/test/hwasan/CMakeLists.txt
compiler-rt/test/hwasan/TestCases/Linux/vfork.c
compiler-rt/test/hwasan/lit.cfg.py
compiler-rt/test/hwasan/lit.site.cfg.py.in
Index: compiler-rt/test/hwasan/lit.site.cfg.py.in
===================================================================
--- compiler-rt/test/hwasan/lit.site.cfg.py.in
+++ compiler-rt/test/hwasan/lit.site.cfg.py.in
@@ -6,6 +6,9 @@
config.target_arch = "@HWASAN_TEST_TARGET_ARCH@"
config.android_files_to_push = @HWASAN_ANDROID_FILES_TO_PUSH@
+# Whether to use -mlam or not.
+config.enable_lam = lit_config.params.get("ENABLE_LAM", "@ENABLE_LAM@")
+
# Load common config for all compiler-rt lit tests.
lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured")
Index: compiler-rt/test/hwasan/lit.cfg.py
===================================================================
--- compiler-rt/test/hwasan/lit.cfg.py
+++ compiler-rt/test/hwasan/lit.cfg.py
@@ -12,6 +12,11 @@
clang_cflags = [config.target_cflags] + config.debug_info_flags
clang_cxxflags = config.cxx_mode_flags + clang_cflags
clang_hwasan_common_cflags = clang_cflags + ["-fsanitize=hwaddress", "-fuse-ld=lld"]
+
+if config.enable_lam == '1':
+ clang_hwasan_common_cflags += ["-mlam"]
+if config.target_arch != 'x86_64' or config.enable_lam == '1':
+ config.available_features.add('pointer-tagging')
if config.target_arch == 'x86_64':
# This does basically the same thing as tagged-globals on aarch64. Because
# the x86_64 implementation is for testing purposes only there is no
Index: compiler-rt/test/hwasan/TestCases/Linux/vfork.c
===================================================================
--- compiler-rt/test/hwasan/TestCases/Linux/vfork.c
+++ compiler-rt/test/hwasan/TestCases/Linux/vfork.c
@@ -2,9 +2,7 @@
// RUN: %clang_hwasan -O0 %s -o %t && %run %t 2>&1
// REQUIRES: aarch64-target-arch || x86_64-target-arch
-
-// Aliasing mode does not support stack tagging.
-// XFAIL: x86_64
+// REQUIRES: pointer-tagging
#include <assert.h>
#include <sys/types.h>
Index: compiler-rt/test/hwasan/CMakeLists.txt
===================================================================
--- compiler-rt/test/hwasan/CMakeLists.txt
+++ compiler-rt/test/hwasan/CMakeLists.txt
@@ -33,5 +33,15 @@
add_lit_testsuite(check-hwasan "Running the HWAddressSanitizer tests"
${HWASAN_TESTSUITES}
DEPENDS ${HWASAN_TEST_DEPS}
+ PARAMS "ENABLE_LAM=0"
)
set_target_properties(check-hwasan PROPERTIES FOLDER "Compiler-RT Misc")
+
+add_lit_testsuite(check-hwasan-lam
+ "Running the HWAddressSanitizer tests with Intel LAM"
+ ${HWASAN_TESTSUITES}
+ DEPENDS ${HWASAN_TEST_DEPS}
+ PARAMS "ENABLE_LAM=1"
+ EXCLUDE_FROM_CHECK_ALL
+ )
+set_target_properties(check-hwasan-lam PROPERTIES FOLDER "Compiler-RT Misc")
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===================================================================
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -816,8 +816,12 @@
}
if (SanArgs.needsTsanRt() && SanArgs.linkRuntimes())
SharedRuntimes.push_back("tsan");
- if (SanArgs.needsHwasanRt() && SanArgs.linkRuntimes())
- SharedRuntimes.push_back("hwasan");
+ if (SanArgs.needsHwasanRt() && SanArgs.linkRuntimes()) {
+ if (SanArgs.needsHwasanLamRt())
+ SharedRuntimes.push_back("hwasan_lam");
+ else
+ SharedRuntimes.push_back("hwasan");
+ }
}
// The stats_client library is also statically linked into DSOs.
@@ -847,9 +851,15 @@
}
if (!SanArgs.needsSharedRt() && SanArgs.needsHwasanRt() && SanArgs.linkRuntimes()) {
- StaticRuntimes.push_back("hwasan");
- if (SanArgs.linkCXXRuntimes())
- StaticRuntimes.push_back("hwasan_cxx");
+ if (SanArgs.needsHwasanLamRt()) {
+ StaticRuntimes.push_back("hwasan_lam");
+ if (SanArgs.linkCXXRuntimes())
+ StaticRuntimes.push_back("hwasan_lam_cxx");
+ } else {
+ StaticRuntimes.push_back("hwasan");
+ if (SanArgs.linkCXXRuntimes())
+ StaticRuntimes.push_back("hwasan_cxx");
+ }
}
if (SanArgs.needsDfsanRt() && SanArgs.linkRuntimes())
StaticRuntimes.push_back("dfsan");
Index: clang/lib/Driver/SanitizerArgs.cpp
===================================================================
--- clang/lib/Driver/SanitizerArgs.cpp
+++ clang/lib/Driver/SanitizerArgs.cpp
@@ -865,6 +865,8 @@
} else {
HwasanAbi = "interceptor";
}
+ if (TC.getTriple().getArch() == llvm::Triple::x86_64)
+ UseLam = Args.hasFlag(options::OPT_mlam, options::OPT_mno_lam, UseLam);
}
if (AllAddedKinds & SanitizerKind::SafeStack) {
Index: clang/include/clang/Driver/SanitizerArgs.h
===================================================================
--- clang/include/clang/Driver/SanitizerArgs.h
+++ clang/include/clang/Driver/SanitizerArgs.h
@@ -57,6 +57,7 @@
// True if cross-dso CFI support if provided by the system (i.e. Android).
bool ImplicitCfiRuntime = false;
bool NeedsMemProfRt = false;
+ bool UseLam = false; // True if -mlam is specified.
public:
/// Parses the sanitizer arguments from an argument list.
@@ -69,6 +70,7 @@
bool needsHwasanRt() const {
return Sanitizers.has(SanitizerKind::HWAddress);
}
+ bool needsHwasanLamRt() const { return needsHwasanRt() && UseLam; }
bool needsTsanRt() const { return Sanitizers.has(SanitizerKind::Thread); }
bool needsMsanRt() const { return Sanitizers.has(SanitizerKind::Memory); }
bool needsFuzzer() const { return Sanitizers.has(SanitizerKind::Fuzzer); }
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -4167,6 +4167,12 @@
def mvzeroupper : Flag<["-"], "mvzeroupper">, Group<m_x86_Features_Group>;
def mno_vzeroupper : Flag<["-"], "mno-vzeroupper">, Group<m_x86_Features_Group>;
+// mlam is not a fully-defined feature yet. It is currently only used by HWASan
+// on x86_64 and is subject to change in the future. For example, we may want
+// to distinguish between LAM48 and LAM57 at some point.
+def mlam : Flag<["-"], "mlam">, Group<m_x86_Features_Group>;
+def mno_lam : Flag<["-"], "mno-lam">, Group<m_x86_Features_Group>;
+
// These are legacy user-facing driver-level option spellings. They are always
// aliases for options that are spelled using the more common Unix / GNU flag
// style of double-dash and equals-joined flags.
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits