summaryrefslogtreecommitdiff
path: root/libbacktrace/BacktraceCurrent.cpp
diff options
context:
space:
mode:
authorChristopher Ferris <cferris@google.com>2020-09-28 20:13:53 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-09-28 20:13:53 +0000
commit06c5c6958ad9455b579b7b29c0fc881adec573cc (patch)
treea050128d65a79f6ac8be8ef582ce8edd3be59974 /libbacktrace/BacktraceCurrent.cpp
parent392c59b819a3df256266e4475876dfc020dad7b7 (diff)
parent0bd4f2dfc1a141c1ee2ad52b7e742c854ec06c28 (diff)
Merge "Add arch member into Unwinder object." am: 087552a89b am: 89f54f6f86 am: d232e3c435 am: 0bd4f2dfc1
Original change: https://android-review.googlesource.com/c/platform/system/core/+/1437275 Change-Id: I1bd0289d05aa589db9623c51fdac8ad3fd322a9a
Diffstat (limited to 'libbacktrace/BacktraceCurrent.cpp')
-rw-r--r--libbacktrace/BacktraceCurrent.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/libbacktrace/BacktraceCurrent.cpp b/libbacktrace/BacktraceCurrent.cpp
index 038b59e15c..a5065752d6 100644
--- a/libbacktrace/BacktraceCurrent.cpp
+++ b/libbacktrace/BacktraceCurrent.cpp
@@ -37,6 +37,12 @@
#include "ThreadEntry.h"
bool BacktraceCurrent::ReadWord(uint64_t ptr, word_t* out_value) {
+#if defined(__aarch64__)
+ // Tagged pointer after Android R would lead top byte to have random values
+ // https://source.android.com/devices/tech/debug/tagged-pointers
+ ptr &= (1ULL << 56) - 1;
+#endif
+
if (!VerifyReadWordArgs(ptr, out_value)) {
return false;
}
@@ -54,6 +60,12 @@ bool BacktraceCurrent::ReadWord(uint64_t ptr, word_t* out_value) {
}
size_t BacktraceCurrent::Read(uint64_t addr, uint8_t* buffer, size_t bytes) {
+#if defined(__aarch64__)
+ // Tagged pointer after Android R would lead top byte to have random values
+ // https://source.android.com/devices/tech/debug/tagged-pointers
+ addr &= (1ULL << 56) - 1;
+#endif
+
backtrace_map_t map;
FillInMap(addr, &map);
if (!BacktraceMap::IsValid(map) || !(map.flags & PROT_READ)) {