diff options
author | Kamil Rytarowski <n54@gmx.com> | 2018-05-19 01:20:00 +0000 |
---|---|---|
committer | Kamil Rytarowski <n54@gmx.com> | 2018-05-19 01:20:00 +0000 |
commit | da054b1bc17dd4b6607aa9c8d7e66ff4d77d1308 (patch) | |
tree | 2bc9c8827b53e7b4d5216ee66143925c3fec6b79 | |
parent | 83357ea1da602d7309226a3c43726054c16d869e (diff) |
Align ClearShadowForThreadStackAndTLS for NetBSD/i386
Summary:
The static TLS vector for the main thread on NetBSD/i386 can be
unaligned in terms of the shadow granularity. Align the start of it with
Round Down and end of it with Round Up operations for the shadow
granularity shift.
Example static TLS vector ranges on NetBSD/i386:
tls_begin_=0xfbee7244 tls_end_=0xfbee726c.
ClearShadowForThreadStackAndTLS() is called from the Main Thread
bootstrap functions.
This change restores the NetBSD x86 32-bit (i386) support.
Sponsored by <The NetBSD Foundation>
Reviewers: vitalybuka, joerg
Reviewed By: vitalybuka
Subscribers: kubamracek, llvm-commits, #sanitizers
Tags: #sanitizers
Differential Revision: https://reviews.llvm.org/D46585
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@332792 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/asan/asan_thread.cc | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/asan/asan_thread.cc b/lib/asan/asan_thread.cc index c5a6db6e4..44aa018d8 100644 --- a/lib/asan/asan_thread.cc +++ b/lib/asan/asan_thread.cc @@ -303,8 +303,13 @@ void AsanThread::SetThreadStackAndTls(const InitOptions *options) { void AsanThread::ClearShadowForThreadStackAndTLS() { PoisonShadow(stack_bottom_, stack_top_ - stack_bottom_, 0); - if (tls_begin_ != tls_end_) - PoisonShadow(tls_begin_, tls_end_ - tls_begin_, 0); + if (tls_begin_ != tls_end_) { + uptr tls_begin_aligned = RoundDownTo(tls_begin_, SHADOW_GRANULARITY); + uptr tls_end_aligned = RoundUpTo(tls_end_, SHADOW_GRANULARITY); + FastPoisonShadowPartialRightRedzone(tls_begin_aligned, + tls_end_ - tls_begin_aligned, + tls_end_aligned - tls_end_, 0); + } } bool AsanThread::GetStackFrameAccessByAddr(uptr addr, |