[HWASan] Introduce non-zero based and dynamic shadow memory (LLVM).
authorAlex Shlyapnikov <alekseys@google.com>
Fri, 20 Apr 2018 20:04:04 +0000 (20:04 +0000)
committerAlex Shlyapnikov <alekseys@google.com>
Fri, 20 Apr 2018 20:04:04 +0000 (20:04 +0000)
commit99cf54baa65e03e027da5b6b928eec2759398056
treef4fcdfe112bad87359db9b95440f59b93755572b
parentc3ec1643f186e6c2a3ae20bc9d9d01858a857152
[HWASan] Introduce non-zero based and dynamic shadow memory (LLVM).

Summary:
Support the dynamic shadow memory offset (the default case for user
space now) and static non-zero shadow memory offset
(-hwasan-mapping-offset option). Keeping the the latter case around
for functionality and performance comparison tests (and mostly for
-hwasan-mapping-offset=0 case).

The implementation is stripped down ASan one, picking only the relevant
parts in the following assumptions: shadow scale is fixed, the shadow
memory is dynamic, it is accessed via ifunc global, shadow memory address
rematerialization is suppressed.

Keep zero-based shadow memory for kernel (-hwasan-kernel option) and
calls instreumented case (-hwasan-instrument-with-calls option), which
essentially means that the generated code is not changed in these cases.

Reviewers: eugenis

Subscribers: srhines, llvm-commits

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

llvm-svn: 330475
llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp
llvm/test/Instrumentation/HWAddressSanitizer/alloca.ll
llvm/test/Instrumentation/HWAddressSanitizer/basic.ll