[compiler-rt] e1e2635 - [HWASan] Use tagged-globals feature on x86.
Matt Morehouse via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 19 06:16:30 PDT 2021
Author: Matt Morehouse
Date: 2021-10-19T05:56:50-07:00
New Revision: e1e2635327d74b6404d30521f9e09928e3919cec
URL: https://github.com/llvm/llvm-project/commit/e1e2635327d74b6404d30521f9e09928e3919cec
DIFF: https://github.com/llvm/llvm-project/commit/e1e2635327d74b6404d30521f9e09928e3919cec.diff
LOG: [HWASan] Use tagged-globals feature on x86.
Allows us to use the small code model when we disable relocation
relaxation.
Reviewed By: eugenis
Differential Revision: https://reviews.llvm.org/D111344
Added:
Modified:
clang/lib/Driver/SanitizerArgs.cpp
compiler-rt/test/hwasan/TestCases/global.c
compiler-rt/test/hwasan/lit.cfg.py
Removed:
################################################################################
diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp
index 8770fb1cf9fef..bef0dec64d4e1 100644
--- a/clang/lib/Driver/SanitizerArgs.cpp
+++ b/clang/lib/Driver/SanitizerArgs.cpp
@@ -1146,7 +1146,7 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
CmdArgs.push_back(Args.MakeArgString("hwasan-abi=" + HwasanAbi));
}
- if (Sanitizers.has(SanitizerKind::HWAddress) && TC.getTriple().isAArch64()) {
+ if (Sanitizers.has(SanitizerKind::HWAddress) && !HwasanUseAliases) {
CmdArgs.push_back("-target-feature");
CmdArgs.push_back("+tagged-globals");
}
diff --git a/compiler-rt/test/hwasan/TestCases/global.c b/compiler-rt/test/hwasan/TestCases/global.c
index 5df828e571acc..23fefd0eccebe 100644
--- a/compiler-rt/test/hwasan/TestCases/global.c
+++ b/compiler-rt/test/hwasan/TestCases/global.c
@@ -5,6 +5,15 @@
// RUN: not %run %t -1 2>&1 | FileCheck --check-prefixes=CHECK,LSYM %s
// RUN: not %env_hwasan_opts=symbolize=0 %run %t -1 2>&1 | FileCheck --check-prefixes=CHECK,LNOSYM %s
+// Test with and without optimizations, with and without PIC, since
diff erent
+// backend passes run depending on these flags.
+// RUN: %clang_hwasan -fno-pic %s -o %t
+// RUN: not %run %t 1 2>&1 | FileCheck --check-prefixes=CHECK,RSYM %s
+// RUN: %clang_hwasan -fno-pic -O2 %s -o %t
+// RUN: not %run %t 1 2>&1 | FileCheck --check-prefixes=CHECK,RSYM %s
+// RUN: %clang_hwasan -O2 %s -o %t
+// RUN: not %run %t 1 2>&1 | FileCheck --check-prefixes=CHECK,RSYM %s
+
// REQUIRES: pointer-tagging
int x = 1;
diff --git a/compiler-rt/test/hwasan/lit.cfg.py b/compiler-rt/test/hwasan/lit.cfg.py
index dcae2b2932815..2cd6d641f2cf9 100644
--- a/compiler-rt/test/hwasan/lit.cfg.py
+++ b/compiler-rt/test/hwasan/lit.cfg.py
@@ -18,10 +18,12 @@
else:
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
- # equivalent target feature implemented on x86_64.
- clang_hwasan_common_cflags += ["-mcmodel=large"]
+ # By default the assembler uses R_X86_64_REX_GOTPCRELX relocations, which can
+ # be relaxed to direct references. When tagged globals are enabled, these
+ # references fail to link since they have more than a 32-bit offset from RIP.
+ # As a workaround, we disable the relaxation.
+ # TODO: Implement a way to disable for the affected relocations only.
+ clang_hwasan_common_cflags += ["-Wa,-mrelax-relocations=no"]
# The callback instrumentation used on x86_64 has a 1/64 chance of choosing a
# stack tag of 0. This causes stack tests to become flaky, so we force tags
More information about the llvm-commits
mailing list