llvm-project/clang/test
Peter Collingbourne 87f477b5e4 hwasan: Implement lazy thread initialization for the interceptor ABI.
The problem is similar to D55986 but for threads: a process with the
interceptor hwasan library loaded might have some threads started by
instrumented libraries and some by uninstrumented libraries, and we
need to be able to run instrumented code on the latter.

The solution is to perform per-thread initialization lazily. If a
function needs to access shadow memory or add itself to the per-thread
ring buffer its prologue checks to see whether the value in the
sanitizer TLS slot is null, and if so it calls __hwasan_thread_enter
and reloads from the TLS slot. The runtime does the same thing if it
needs to access this data structure.

This change means that the code generator needs to know whether we
are targeting the interceptor runtime, since we don't want to pay
the cost of lazy initialization when targeting a platform with native
hwasan support. A flag -fsanitize-hwaddress-abi={interceptor,platform}
has been introduced for selecting the runtime ABI to target. The
default ABI is set to interceptor since it's assumed that it will
be more common that users will be compiling application code than
platform code.

Because we can no longer assume that the TLS slot is initialized,
the pthread_create interceptor is no longer necessary, so it has
been removed.

Ideally, lazy initialization should only cost one instruction in the
hot path, but at present the call may cause us to spill arguments
to the stack, which means more instructions in the hot path (or
theoretically in the cold path if the spills are moved with shrink
wrapping). With an appropriately chosen calling convention for
the per-thread initialization function (TODO) the hot path should
always need just one instruction and the cold path should need two
instructions with no spilling required.

Differential Revision: https://reviews.llvm.org/D56038

llvm-svn: 350429
2019-01-04 19:27:04 +00:00
..
ARCMT Quickfix for failing tests. 2018-08-17 23:54:00 +00:00
AST [AST] Store "UsesADL" information in CallExpr. 2018-12-12 21:50:55 +00:00
ASTMerge
Analysis [analyzer] pr38668: Do not attempt to cast loaded integers to floats. 2018-12-22 02:06:51 +00:00
CXX Refactor the way we handle diagnosing unused expression results. 2019-01-04 16:58:14 +00:00
CodeCompletion Refactor the way we handle diagnosing unused expression results. 2019-01-04 16:58:14 +00:00
CodeGen hwasan: Implement lazy thread initialization for the interceptor ABI. 2019-01-04 19:27:04 +00:00
CodeGenCUDA [CUDA] Treat extern global variable shadows same as regular extern vars. 2018-12-22 01:11:09 +00:00
CodeGenCXX Add two new pragmas for controlling software pipelining optimizations. 2019-01-04 17:20:00 +00:00
CodeGenCoroutines Revert "[CodeGenCXX] Treat 'this' as noalias in constructors" 2018-10-15 15:43:00 +00:00
CodeGenObjC [ObjCARC] Add an new attribute, objc_externally_retained 2019-01-04 18:33:06 +00:00
CodeGenObjCXX [CodeGen] Replace '@' characters in block descriptors' symbol names with 2018-12-29 17:28:30 +00:00
CodeGenOpenCL [OpenCL][CodeGen] Fix replacing memcpy with addrspacecast 2018-12-10 12:03:00 +00:00
CodeGenOpenCLCXX [OpenCL] Add generic AS to 'this' pointer 2018-12-13 10:15:27 +00:00
Coverage [Frontend] Delete -print-decl-contexts 2018-10-03 03:50:44 +00:00
CoverageMapping [Coverage] Specify the Itanium ABI triple for a C++ test 2018-11-28 20:51:09 +00:00
Driver hwasan: Implement lazy thread initialization for the interceptor ABI. 2019-01-04 19:27:04 +00:00
FixIt Introduce the _Clang scoped attribute token. 2018-11-09 17:19:45 +00:00
Format
Frontend Validate -add-plugin arguments. 2019-01-03 18:26:06 +00:00
Headers [OpenCL] Add support of cl_intel_device_side_avc_motion_estimation extension 2018-11-08 11:25:41 +00:00
Import [AST] Store "UsesADL" information in CallExpr. 2018-12-12 21:50:55 +00:00
Index Fix incorrect column numbers in test from r350282. 2019-01-03 01:30:50 +00:00
Integration
Layout
Lexer [c++20] Implement P0482R6: enable -fchar8_t by default in C++20 mode. 2018-11-14 21:04:34 +00:00
Misc [ObjCARC] Add an new attribute, objc_externally_retained 2019-01-04 18:33:06 +00:00
Modules Reapply "Avoid emitting redundant or unusable directories in DIFile metadata entries."" 2018-12-06 18:44:50 +00:00
OpenMP [OPENMP][NVPTX]Use new functions from the runtime library. 2019-01-04 17:25:09 +00:00
PCH Reuse code from CGDebugInfo::getOrCreateFile() when creating the file 2018-12-11 16:58:43 +00:00
Parser Add two new pragmas for controlling software pipelining optimizations. 2019-01-04 17:20:00 +00:00
Preprocessor [Clang] Add __builtin_launder 2018-12-14 21:11:28 +00:00
Profile
Refactor
Rewriter
Sema Add two new pragmas for controlling software pipelining optimizations. 2019-01-04 17:20:00 +00:00
SemaCUDA [CUDA][HIP] Fix ShouldDeleteSpecialMember for inherited constructors 2018-10-09 15:53:14 +00:00
SemaCXX Refactor the way we handle diagnosing unused expression results. 2019-01-04 16:58:14 +00:00
SemaObjC [ObjCARC] Add an new attribute, objc_externally_retained 2019-01-04 18:33:06 +00:00
SemaObjCXX Distinguish `__block` variables that are captured by escaping blocks 2018-10-01 21:51:28 +00:00
SemaOpenCL OpenCL: Improve vector printf warnings 2018-12-01 22:16:27 +00:00
SemaOpenCLCXX [OpenCL] Add generic AS to 'this' pointer 2018-12-13 10:15:27 +00:00
SemaTemplate Fix crash if an in-class explicit function specialization has explicit 2018-12-04 22:26:32 +00:00
TableGen
Templight
Tooling Move detection of libc++ include dirs to Driver on MacOS 2018-12-05 14:24:14 +00:00
Unit
VFS [VFS] Implement `RedirectingFileSystem::getRealPath`. 2018-11-16 01:18:04 +00:00
clang-rename
.clang-format
CMakeLists.txt [analyzer] Fix bots by removing new check-clang-analyzer commands from CHECK-ALL 2018-08-14 18:55:34 +00:00
TestRunner.sh
cxx-sections.data
lit.cfg.py [Driver] Disable -faddrsig on Gentoo by default 2018-12-23 15:07:26 +00:00
lit.site.cfg.py.in Import lit.llvm after rC341132 2018-08-31 00:24:36 +00:00
make_test_dirs.pl