summaryrefslogtreecommitdiff
path: root/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cc
diff options
context:
space:
mode:
authorKuba Brecka <kuba.brecka@gmail.com>2016-06-27 15:32:18 +0000
committerKuba Brecka <kuba.brecka@gmail.com>2016-06-27 15:32:18 +0000
commit7d98ad91a1ea76809de8ae3c5833af980902219e (patch)
tree4780da72ed056017a718e8e7e21cf710d8da5bd3 /lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cc
parent28f8c79bb4ff22e3eb60df80b9b51cba3e6872a5 (diff)
[sanitizer] Stop unwinding the stack when a close-to-zero PC is found
On OS X, we often get stack trace in a report that ends with a 0x0 frame. To get rid of it, let's trim the stack trace when we find a close-to-zero value, which is obviously not a valid PC. Differential Revision: http://reviews.llvm.org/D14656 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@273886 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cc')
-rw-r--r--lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cc2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cc b/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cc
index f38886acd..c9dfb8a0e 100644
--- a/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cc
+++ b/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cc
@@ -108,6 +108,8 @@ _Unwind_Reason_Code Unwind_Trace(struct _Unwind_Context *ctx, void *param) {
UnwindTraceArg *arg = (UnwindTraceArg*)param;
CHECK_LT(arg->stack->size, arg->max_depth);
uptr pc = Unwind_GetIP(ctx);
+ const uptr kPageSize = GetPageSizeCached();
+ if (pc < kPageSize) return UNWIND_STOP;
arg->stack->trace_buffer[arg->stack->size++] = pc;
if (arg->stack->size == arg->max_depth) return UNWIND_STOP;
return UNWIND_CONTINUE;