aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Rytarowski <n54@gmx.com>2018-05-19 01:20:00 +0000
committerKamil Rytarowski <n54@gmx.com>2018-05-19 01:20:00 +0000
commitda054b1bc17dd4b6607aa9c8d7e66ff4d77d1308 (patch)
tree2bc9c8827b53e7b4d5216ee66143925c3fec6b79
parent83357ea1da602d7309226a3c43726054c16d869e (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.cc9
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,