summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Ferris <cferris@google.com>2015-08-20 21:44:08 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-08-20 21:44:08 +0000
commitb7eec19690ac8e5bd4f012fd5500ad3640ea6d3e (patch)
tree0da6245b618f973f6829c3692d703c88001d645f
parente49b02394f0bb74f0904b9b07c6da787ff6f045d (diff)
parent802ae55fd1454226b1d76e4a311b2b937d1e0dd9 (diff)
downloadunwinding-b7eec19690ac8e5bd4f012fd5500ad3640ea6d3e.tar.gz
am 802ae55f: Display the map offset for each frame.
* commit '802ae55fd1454226b1d76e4a311b2b937d1e0dd9': Display the map offset for each frame.
-rw-r--r--libbacktrace/Backtrace.cpp5
-rw-r--r--libbacktrace/backtrace_test.cpp9
2 files changed, 14 insertions, 0 deletions
diff --git a/libbacktrace/Backtrace.cpp b/libbacktrace/Backtrace.cpp
index 128bb04..97f0ef4 100644
--- a/libbacktrace/Backtrace.cpp
+++ b/libbacktrace/Backtrace.cpp
@@ -102,6 +102,11 @@ std::string Backtrace::FormatFrameData(const backtrace_frame_data_t* frame) {
uintptr_t relative_pc = BacktraceMap::GetRelativePc(frame->map, frame->pc);
std::string line(StringPrintf("#%02zu pc %" PRIPTR " %s", frame->num, relative_pc, map_name));
+ // Special handling for non-zero offset maps, we need to print that
+ // information.
+ if (frame->map.offset != 0) {
+ line += " (offset " + StringPrintf("0x%" PRIxPTR, frame->map.offset) + ")";
+ }
if (!frame->func_name.empty()) {
line += " (" + frame->func_name;
if (frame->func_offset) {
diff --git a/libbacktrace/backtrace_test.cpp b/libbacktrace/backtrace_test.cpp
index 760f5cc..c650755 100644
--- a/libbacktrace/backtrace_test.cpp
+++ b/libbacktrace/backtrace_test.cpp
@@ -825,6 +825,15 @@ TEST(libbacktrace, format_test) {
EXPECT_EQ("#01 pc 123456dc MapFake (ProcFake+645)",
#endif
backtrace->FormatFrameData(&frame));
+
+ // Check a non-zero map offset.
+ frame.map.offset = 0x1000;
+#if defined(__LP64__)
+ EXPECT_EQ("#01 pc 00000000123456dc MapFake (offset 0x1000) (ProcFake+645)",
+#else
+ EXPECT_EQ("#01 pc 123456dc MapFake (offset 0x1000) (ProcFake+645)",
+#endif
+ backtrace->FormatFrameData(&frame));
}
struct map_test_t {