diff options
author | Kostya Serebryany <kcc@google.com> | 2014-05-21 07:34:03 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2014-05-21 07:34:03 +0000 |
commit | 5562e9160076958b9eb618b2d6b144adafd7f87c (patch) | |
tree | 9e85f8a9badf53f0d19becdd8264b99060982231 /lib/sanitizer_common/sanitizer_stacktrace.cc | |
parent | 527e8c5eeb38ebd4b6c346963da1a9d8b9633b74 (diff) |
Use 64-bit pointer to unwind stack for x86-64
X32 uses ILP32 data model in 64-bit hardware mode. This patch always
uses 64-bit pointer to unwind stack for x86-64.
Patch by H.J. Lu
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@209277 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_stacktrace.cc')
-rw-r--r-- | lib/sanitizer_common/sanitizer_stacktrace.cc | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/sanitizer_common/sanitizer_stacktrace.cc b/lib/sanitizer_common/sanitizer_stacktrace.cc index 89cee25ce..c608fbbe5 100644 --- a/lib/sanitizer_common/sanitizer_stacktrace.cc +++ b/lib/sanitizer_common/sanitizer_stacktrace.cc @@ -39,21 +39,21 @@ void StackTrace::FastUnwindStack(uptr pc, uptr bp, CHECK_GE(max_depth, 2); trace[0] = pc; size = 1; - uptr *frame = (uptr *)bp; - uptr *prev_frame = frame - 1; + uhwptr *frame = (uhwptr *)bp; + uhwptr *prev_frame = frame - 1; if (stack_top < 4096) return; // Sanity check for stack top. // Avoid infinite loop when frame == frame[0] by using frame > prev_frame. while (frame > prev_frame && - frame < (uptr *)stack_top - 2 && - frame > (uptr *)stack_bottom && + frame < (uhwptr *)stack_top - 2 && + frame > (uhwptr *)stack_bottom && IsAligned((uptr)frame, sizeof(*frame)) && size < max_depth) { - uptr pc1 = frame[1]; + uhwptr pc1 = frame[1]; if (pc1 != pc) { - trace[size++] = pc1; + trace[size++] = (uptr) pc1; } prev_frame = frame; - frame = (uptr*)frame[0]; + frame = (uhwptr *)frame[0]; } } |