[PATCH] D32199: [TBAASan] A TBAA Sanitizer (Clang)
Hal Finkel via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 18 16:15:23 PDT 2017
hfinkel created this revision.
Herald added subscribers: mcrosier, emaste.
This patch introduces the runtime components of a TBAA sanitizer: a sanitizer for type-based aliasing violations.
C/C++ have type-based aliasing rules, and LLVM's optimizer can exploit these given TBAA metadata added by Clang. Roughly, a pointer of given type cannot be used to access an object of a different type (with, of course, certain exceptions). Unfortunately, there's a lot of code in the wild that violates these rules (e.g. for type punning), and such code often must be built with -fno-strict-aliasing. Performance is often sacrificed as a result. Part of the problem is the difficulty of finding TBAA violations. Hopefully, this sanitizer will help.
https://reviews.llvm.org/D32197 (Runtime)
https://reviews.llvm.org/D32198 (LLVM)
The Clang changes seems mostly formulaic, the one specific change being that when the TBAA sanitizer is enabled, TBAA is always generated, even at -O0.
Clang's TBAA representation currently has a problem representing unions, as demonstrated by the one XFAIL'd test in the runtime patch. We'll update the TBAA representation to fix this, and at the same time, update the sanitizer.
https://reviews.llvm.org/D32199
Files:
include/clang/Basic/Attr.td
include/clang/Basic/AttrDocs.td
include/clang/Basic/Sanitizers.def
include/clang/Driver/SanitizerArgs.h
lib/CodeGen/BackendUtil.cpp
lib/CodeGen/CGDeclCXX.cpp
lib/CodeGen/CodeGenFunction.cpp
lib/CodeGen/CodeGenModule.cpp
lib/CodeGen/CodeGenTBAA.cpp
lib/Driver/SanitizerArgs.cpp
lib/Driver/ToolChains/CommonArgs.cpp
lib/Driver/ToolChains/FreeBSD.cpp
lib/Driver/ToolChains/Linux.cpp
lib/Frontend/CompilerInvocation.cpp
lib/Lex/PPMacroExpansion.cpp
lib/Sema/SemaDeclAttr.cpp
test/CodeGen/sanitize-tbaa-attr.cpp
test/Driver/sanitizer-ld.c
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D32199.95654.patch
Type: text/x-patch
Size: 15613 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170418/b0ed99c7/attachment-0001.bin>
More information about the cfe-commits
mailing list