Merge "Change the way some maps are printed." am: 07d9de7016 am: bedab17693

am: 4690cf6108

* commit '4690cf6108e67bcf1b0440b7f2fa18e244f57ef6':
  Change the way some maps are printed.
This commit is contained in:
Christopher Ferris 2015-12-01 00:42:38 +00:00 committed by android-build-merger
commit 5f1fccf87a
2 changed files with 33 additions and 10 deletions

View File

@ -93,16 +93,26 @@ std::string Backtrace::FormatFrameData(size_t frame_num) {
}
std::string Backtrace::FormatFrameData(const backtrace_frame_data_t* frame) {
const char* map_name;
if (BacktraceMap::IsValid(frame->map) && !frame->map.name.empty()) {
map_name = frame->map.name.c_str();
uintptr_t relative_pc;
std::string map_name;
if (BacktraceMap::IsValid(frame->map)) {
relative_pc = BacktraceMap::GetRelativePc(frame->map, frame->pc);
if (!frame->map.name.empty()) {
map_name = frame->map.name.c_str();
if (map_name[0] == '[' && map_name[map_name.size() - 1] == ']') {
map_name.resize(map_name.size() - 1);
map_name += StringPrintf(":%" PRIPTR "]", frame->map.start);
}
} else {
map_name = StringPrintf("<anonymous:%" PRIPTR ">", frame->map.start);
}
} else {
map_name = "<unknown>";
relative_pc = frame->pc;
}
uintptr_t relative_pc = BacktraceMap::GetRelativePc(frame->map, frame->pc);
std::string line(StringPrintf("#%02zu pc %" PRIPTR " %s", frame->num, relative_pc, map_name));
std::string line(StringPrintf("#%02zu pc %" PRIPTR " ", frame->num, relative_pc));
line += map_name;
// Special handling for non-zero offset maps, we need to print that
// information.
if (frame->map.offset != 0) {

View File

@ -775,16 +775,29 @@ TEST(libbacktrace, format_test) {
backtrace->FormatFrameData(&frame));
// Check map name empty, but exists.
frame.map.start = 1;
frame.map.end = 1;
frame.pc = 0xb0020;
frame.map.start = 0xb0000;
frame.map.end = 0xbffff;
frame.map.load_base = 0;
#if defined(__LP64__)
EXPECT_EQ("#01 pc 0000000000000001 <unknown>",
EXPECT_EQ("#01 pc 0000000000000020 <anonymous:00000000000b0000>",
#else
EXPECT_EQ("#01 pc 00000001 <unknown>",
EXPECT_EQ("#01 pc 00000020 <anonymous:000b0000>",
#endif
backtrace->FormatFrameData(&frame));
// Check map name begins with a [.
frame.pc = 0xc0020;
frame.map.start = 0xc0000;
frame.map.end = 0xcffff;
frame.map.load_base = 0;
frame.map.name = "[anon:thread signal stack]";
#if defined(__LP64__)
EXPECT_EQ("#01 pc 0000000000000020 [anon:thread signal stack:00000000000c0000]",
#else
EXPECT_EQ("#01 pc 00000020 [anon:thread signal stack:000c0000]",
#endif
backtrace->FormatFrameData(&frame));
// Check relative pc is set and map name is set.
frame.pc = 0x12345679;