From fdc95c967099d6cb963195abec9b42b3c64989fd Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Wed, 13 Sep 2017 15:33:39 -0700 Subject: [PATCH] debuggerd_fallback: print maps. Bug: http://b/63400743 Bug: http://b/65590288 Test: killall -ABRT media.codec Change-Id: I58e47dcd8e99ad7a5945604c27876dd01259e501 --- debuggerd/libdebuggerd/tombstone.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/debuggerd/libdebuggerd/tombstone.cpp b/debuggerd/libdebuggerd/tombstone.cpp index 50d19bd1d..f5ecf48c5 100644 --- a/debuggerd/libdebuggerd/tombstone.cpp +++ b/debuggerd/libdebuggerd/tombstone.cpp @@ -800,10 +800,22 @@ void engrave_tombstone_ucontext(int tombstone_fd, uintptr_t abort_msg_address, s dump_abort_message(backtrace.get(), &log, abort_msg_address); dump_registers(&log, ucontext); - // TODO: Dump registers from the ucontext. if (backtrace->Unwind(0, ucontext)) { dump_backtrace_and_stack(backtrace.get(), &log); } else { ALOGE("Unwind failed: pid = %d, tid = %d", pid, tid); } + + // TODO: Make this match the format of dump_all_maps above. + _LOG(&log, logtype::MAPS, "memory map:\n"); + android::base::unique_fd maps_fd(open("/proc/self/maps", O_RDONLY | O_CLOEXEC)); + if (maps_fd == -1) { + _LOG(&log, logtype::MAPS, " failed to open /proc/self/maps: %s", strerror(errno)); + } else { + char buf[256]; + ssize_t rc; + while ((rc = TEMP_FAILURE_RETRY(read(maps_fd.get(), buf, sizeof(buf)))) > 0) { + android::base::WriteFully(tombstone_fd, buf, rc); + } + } }