summaryrefslogtreecommitdiff
path: root/lib/sanitizer_common/sanitizer_stacktrace.cc
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2014-05-21 07:34:03 +0000
committerKostya Serebryany <kcc@google.com>2014-05-21 07:34:03 +0000
commit5562e9160076958b9eb618b2d6b144adafd7f87c (patch)
tree9e85f8a9badf53f0d19becdd8264b99060982231 /lib/sanitizer_common/sanitizer_stacktrace.cc
parent527e8c5eeb38ebd4b6c346963da1a9d8b9633b74 (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.cc14
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];
}
}