summaryrefslogtreecommitdiff
path: root/lib/asan/asan_fake_stack.cc
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2013-12-13 15:03:49 +0000
committerKostya Serebryany <kcc@google.com>2013-12-13 15:03:49 +0000
commit0388d0116b38ee655074e3b325feb6d69f8fb1d5 (patch)
treec7bf4791e8535bed8e93992c5b0e35041c6723b6 /lib/asan/asan_fake_stack.cc
parentc9486291b63fe52a9f3819780a7bfe0d746b78e3 (diff)
[asan] add flag uar_noreserve to use noreserve mmap for fake stack. uar_noreserve=1 will save some memory but also negatively affect performance
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@197233 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/asan/asan_fake_stack.cc')
-rw-r--r--lib/asan/asan_fake_stack.cc10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/asan/asan_fake_stack.cc b/lib/asan/asan_fake_stack.cc
index 7301c9afd..00fe2fe59 100644
--- a/lib/asan/asan_fake_stack.cc
+++ b/lib/asan/asan_fake_stack.cc
@@ -42,13 +42,17 @@ FakeStack *FakeStack::Create(uptr stack_size_log) {
stack_size_log = kMinStackSizeLog;
if (stack_size_log > kMaxStackSizeLog)
stack_size_log = kMaxStackSizeLog;
+ uptr size = RequiredSize(stack_size_log);
FakeStack *res = reinterpret_cast<FakeStack *>(
- MmapOrDie(RequiredSize(stack_size_log), "FakeStack"));
+ flags()->uar_noreserve ? MmapNoReserveOrDie(size, "FakeStack")
+ : MmapOrDie(size, "FakeStack"));
res->stack_size_log_ = stack_size_log;
u8 *p = reinterpret_cast<u8 *>(res);
- VReport(1, "T%d: FakeStack created: %p -- %p stack_size_log: %zd \n",
+ VReport(1, "T%d: FakeStack created: %p -- %p stack_size_log: %zd; "
+ "noreserve=%d \n",
GetCurrentTidOrInvalid(), p,
- p + FakeStack::RequiredSize(stack_size_log), stack_size_log);
+ p + FakeStack::RequiredSize(stack_size_log), stack_size_log,
+ flags()->uar_noreserve);
return res;
}