Fix regression: log mem maps around native fault address
Restore the logging of the mem maps around the fault address along with the rest of the faulting thread's information. (It was still being written to the tombstone file, but the logging got dropped on the floor in the refactoring around AM report integration). Bug 8654694 Change-Id: Id8851fa765dfe6b6ce41ccfc39e85eaac0acc629
This commit is contained in:
parent
2553825797
commit
300fd6fdbc
1 changed files with 11 additions and 10 deletions
|
|
@ -357,23 +357,24 @@ static void dump_backtrace_and_stack(const ptrace_context_t* context, log_t* log
|
|||
}
|
||||
}
|
||||
|
||||
static void dump_map(log_t* log, map_info_t* m, const char* what) {
|
||||
static void dump_map(log_t* log, map_info_t* m, const char* what, int scopeFlags) {
|
||||
if (m != NULL) {
|
||||
_LOG(log, SCOPE_SENSITIVE, " %08x-%08x %c%c%c %s\n", m->start, m->end,
|
||||
_LOG(log, scopeFlags, " %08x-%08x %c%c%c %s\n", m->start, m->end,
|
||||
m->is_readable ? 'r' : '-',
|
||||
m->is_writable ? 'w' : '-',
|
||||
m->is_executable ? 'x' : '-',
|
||||
m->name);
|
||||
} else {
|
||||
_LOG(log, SCOPE_SENSITIVE, " (no %s)\n", what);
|
||||
_LOG(log, scopeFlags, " (no %s)\n", what);
|
||||
}
|
||||
}
|
||||
|
||||
static void dump_nearby_maps(const ptrace_context_t* context, log_t* log, pid_t tid) {
|
||||
static void dump_nearby_maps(const ptrace_context_t* context, log_t* log, pid_t tid, bool at_fault) {
|
||||
int scopeFlags = SCOPE_SENSITIVE | (at_fault ? SCOPE_AT_FAULT : 0);
|
||||
siginfo_t si;
|
||||
memset(&si, 0, sizeof(si));
|
||||
if (ptrace(PTRACE_GETSIGINFO, tid, 0, &si)) {
|
||||
_LOG(log, SCOPE_SENSITIVE, "cannot get siginfo for %d: %s\n",
|
||||
_LOG(log, scopeFlags, "cannot get siginfo for %d: %s\n",
|
||||
tid, strerror(errno));
|
||||
return;
|
||||
}
|
||||
|
|
@ -387,7 +388,7 @@ static void dump_nearby_maps(const ptrace_context_t* context, log_t* log, pid_t
|
|||
return;
|
||||
}
|
||||
|
||||
_LOG(log, SCOPE_SENSITIVE, "\nmemory map around fault addr %08x:\n", (int)si.si_addr);
|
||||
_LOG(log, scopeFlags, "\nmemory map around fault addr %08x:\n", (int)si.si_addr);
|
||||
|
||||
/*
|
||||
* Search for a match, or for a hole where the match would be. The list
|
||||
|
|
@ -415,9 +416,9 @@ static void dump_nearby_maps(const ptrace_context_t* context, log_t* log, pid_t
|
|||
* Show "next" then "match" then "prev" so that the addresses appear in
|
||||
* ascending order (like /proc/pid/maps).
|
||||
*/
|
||||
dump_map(log, next, "map below");
|
||||
dump_map(log, map, "map for address");
|
||||
dump_map(log, prev, "map above");
|
||||
dump_map(log, next, "map below", scopeFlags);
|
||||
dump_map(log, map, "map for address", scopeFlags);
|
||||
dump_map(log, prev, "map above", scopeFlags);
|
||||
}
|
||||
|
||||
static void dump_thread(const ptrace_context_t* context, log_t* log, pid_t tid, bool at_fault,
|
||||
|
|
@ -428,7 +429,7 @@ static void dump_thread(const ptrace_context_t* context, log_t* log, pid_t tid,
|
|||
dump_backtrace_and_stack(context, log, tid, at_fault);
|
||||
if (at_fault) {
|
||||
dump_memory_and_code(context, log, tid, at_fault);
|
||||
dump_nearby_maps(context, log, tid);
|
||||
dump_nearby_maps(context, log, tid, at_fault);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue