diff options
Diffstat (limited to 'libunwindstack/Unwinder.cpp')
-rw-r--r-- | libunwindstack/Unwinder.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/libunwindstack/Unwinder.cpp b/libunwindstack/Unwinder.cpp index 792cd0b70..813363905 100644 --- a/libunwindstack/Unwinder.cpp +++ b/libunwindstack/Unwinder.cpp @@ -59,7 +59,8 @@ void Unwinder::FillInDexFrame() { if (info != nullptr) { frame->map_start = info->start; frame->map_end = info->end; - frame->map_offset = info->offset; + frame->map_elf_start_offset = info->elf_start_offset; + frame->map_exact_offset = info->offset; frame->map_load_bias = info->load_bias; frame->map_flags = info->flags; if (resolve_names_) { @@ -102,7 +103,8 @@ void Unwinder::FillInFrame(MapInfo* map_info, Elf* elf, uint64_t rel_pc, uint64_ if (resolve_names_) { frame->map_name = map_info->name; } - frame->map_offset = map_info->offset; + frame->map_elf_start_offset = map_info->elf_start_offset; + frame->map_exact_offset = map_info->offset; frame->map_start = map_info->start; frame->map_end = map_info->end; frame->map_flags = map_info->flags; @@ -290,10 +292,6 @@ std::string Unwinder::FormatFrame(const FrameData& frame, bool is32bit) { data += android::base::StringPrintf(" #%02zu pc %016" PRIx64, frame.num, frame.rel_pc); } - if (frame.map_offset != 0) { - data += android::base::StringPrintf(" (offset 0x%" PRIx64 ")", frame.map_offset); - } - if (frame.map_start == frame.map_end) { // No valid map associated with this frame. data += " <unknown>"; @@ -302,6 +300,11 @@ std::string Unwinder::FormatFrame(const FrameData& frame, bool is32bit) { } else { data += android::base::StringPrintf(" <anonymous:%" PRIx64 ">", frame.map_start); } + + if (frame.map_elf_start_offset != 0) { + data += android::base::StringPrintf(" (offset 0x%" PRIx64 ")", frame.map_elf_start_offset); + } + if (!frame.function_name.empty()) { data += " (" + frame.function_name; if (frame.function_offset != 0) { |