From 600017332cb3969c8a23012362f4b63d73e1f9ea Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Thu, 20 Aug 2015 11:16:54 -0700 Subject: Display the map offset for each frame. The dlopen of a shared library in an apk results in large map offsets. Unfortunately, the current way that the frame data is printed, it's impossible to tell what the relative pc is relative to. With the addition of the offset, it's possible to figure out what the relative pc actually references. Bug: 23348999 (cherry picked from commit e0ab23223a1c3110c9550136b8a119b4c30ec066) Change-Id: I950f92c1cb29ee05eed777f47453efa03318cf3e --- libbacktrace/Backtrace.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'libbacktrace/Backtrace.cpp') diff --git a/libbacktrace/Backtrace.cpp b/libbacktrace/Backtrace.cpp index 128bb047b..97f0ef445 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) { -- cgit v1.2.3