diff options
author | Christopher Ferris <cferris@google.com> | 2020-09-28 20:33:51 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-09-28 20:33:51 +0000 |
commit | 96e73d573e09dd8cb0afb1205ca7df1f0c20fa98 (patch) | |
tree | 1f139a357de89063c2ca58754f583de61797e456 /libbacktrace/BacktraceCurrent.cpp | |
parent | 75766694c2969fc87ae2ab81733894d659e80947 (diff) | |
parent | 06c5c6958ad9455b579b7b29c0fc881adec573cc (diff) |
Merge "Add arch member into Unwinder object." am: 087552a89b am: 89f54f6f86 am: d232e3c435 am: 0bd4f2dfc1 am: 06c5c6958a
Original change: https://android-review.googlesource.com/c/platform/system/core/+/1437275
Change-Id: I5c48e2558686db96b082d0d334a97c24f4296037
Diffstat (limited to 'libbacktrace/BacktraceCurrent.cpp')
-rw-r--r-- | libbacktrace/BacktraceCurrent.cpp | 12 |
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)) { |