summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElliott Hughes2018-02-15 11:18:21 -0600
committerElliott Hughes2018-02-15 18:28:50 -0600
commite1415a5c3b3e279fd6cfb6a7ee73ddc98bbec2ae (patch)
tree93490451128e77d8f3a6fd3dcfb01c84975ef31d /libbacktrace
parent73a2508dc4b2b6644e4904f013a6df5fff5e4569 (diff)
downloadplatform-system-core-e1415a5c3b3e279fd6cfb6a7ee73ddc98bbec2ae.tar.gz
platform-system-core-e1415a5c3b3e279fd6cfb6a7ee73ddc98bbec2ae.tar.xz
platform-system-core-e1415a5c3b3e279fd6cfb6a7ee73ddc98bbec2ae.zip
Include the map name when dumping memory around a register.
Bug: http://b/19590178 Test: ran tests, ran crasher Change-Id: Ib9afa34c860d8732ef1943eb4decd0b7c8fb55fd
Diffstat (limited to 'libbacktrace')
-rw-r--r--libbacktrace/Backtrace.cpp4
-rw-r--r--libbacktrace/BacktraceMap.cpp12
-rw-r--r--libbacktrace/include/backtrace/BacktraceMap.h3
3 files changed, 15 insertions, 4 deletions
diff --git a/libbacktrace/Backtrace.cpp b/libbacktrace/Backtrace.cpp
index dec241c3c..6445a7c51 100644
--- a/libbacktrace/Backtrace.cpp
+++ b/libbacktrace/Backtrace.cpp
@@ -85,14 +85,12 @@ std::string Backtrace::FormatFrameData(size_t frame_num) {
85std::string Backtrace::FormatFrameData(const backtrace_frame_data_t* frame) { 85std::string Backtrace::FormatFrameData(const backtrace_frame_data_t* frame) {
86 std::string map_name; 86 std::string map_name;
87 if (BacktraceMap::IsValid(frame->map)) { 87 if (BacktraceMap::IsValid(frame->map)) {
88 map_name = frame->map.Name();
88 if (!frame->map.name.empty()) { 89 if (!frame->map.name.empty()) {
89 map_name = frame->map.name.c_str();
90 if (map_name[0] == '[' && map_name[map_name.size() - 1] == ']') { 90 if (map_name[0] == '[' && map_name[map_name.size() - 1] == ']') {
91 map_name.resize(map_name.size() - 1); 91 map_name.resize(map_name.size() - 1);
92 map_name += StringPrintf(":%" PRIPTR "]", frame->map.start); 92 map_name += StringPrintf(":%" PRIPTR "]", frame->map.start);
93 } 93 }
94 } else {
95 map_name = StringPrintf("<anonymous:%" PRIPTR ">", frame->map.start);
96 } 94 }
97 } else { 95 } else {
98 map_name = "<unknown>"; 96 map_name = "<unknown>";
diff --git a/libbacktrace/BacktraceMap.cpp b/libbacktrace/BacktraceMap.cpp
index c8a500cee..bdae14062 100644
--- a/libbacktrace/BacktraceMap.cpp
+++ b/libbacktrace/BacktraceMap.cpp
@@ -24,11 +24,21 @@
24 24
25#include <log/log.h> 25#include <log/log.h>
26 26
27#include <backtrace/backtrace_constants.h> 27#include <android-base/stringprintf.h>
28#include <backtrace/Backtrace.h>
28#include <backtrace/BacktraceMap.h> 29#include <backtrace/BacktraceMap.h>
30#include <backtrace/backtrace_constants.h>
29 31
30#include "thread_utils.h" 32#include "thread_utils.h"
31 33
34using android::base::StringPrintf;
35
36std::string backtrace_map_t::Name() const {
37 if (!name.empty()) return name;
38 if (start == 0 && end == 0) return "";
39 return StringPrintf("<anonymous:%" PRIPTR ">", start);
40}
41
32BacktraceMap::BacktraceMap(pid_t pid) : pid_(pid) { 42BacktraceMap::BacktraceMap(pid_t pid) : pid_(pid) {
33 if (pid_ < 0) { 43 if (pid_ < 0) {
34 pid_ = getpid(); 44 pid_ = getpid();
diff --git a/libbacktrace/include/backtrace/BacktraceMap.h b/libbacktrace/include/backtrace/BacktraceMap.h
index e19c41396..7b26079cc 100644
--- a/libbacktrace/include/backtrace/BacktraceMap.h
+++ b/libbacktrace/include/backtrace/BacktraceMap.h
@@ -48,6 +48,9 @@ struct backtrace_map_t {
48 uint64_t load_bias = 0; 48 uint64_t load_bias = 0;
49 int flags = 0; 49 int flags = 0;
50 std::string name; 50 std::string name;
51
52 // Returns `name` if non-empty, or `<anonymous:0x...>` otherwise.
53 std::string Name() const;
51}; 54};
52 55
53namespace unwindstack { 56namespace unwindstack {