Add option to force memunreachable check.
The new option is named check_unreachable_on_signal. It is meant
to duplicate dumpsys meminfo --unreachable <PID> for non-java
processes. When enabled, a user can send a signal to a process
which will trigger the unreachable check on the next allocation
call.
Added new unit tests.
Test: New unit tests pass.
Test: Enabled for the entire system, then dumped on the netd
Test: process and also system_server.
Change-Id: I73561b408a947a11ce21a211b065d59fcc39097b
diff --git a/libc/malloc_debug/Config.cpp b/libc/malloc_debug/Config.cpp
index 11887e2..5fd511f 100644
--- a/libc/malloc_debug/Config.cpp
+++ b/libc/malloc_debug/Config.cpp
@@ -70,17 +70,21 @@
const std::unordered_map<std::string, Config::OptionInfo> Config::kOptions = {
{
- "guard", {FRONT_GUARD | REAR_GUARD | TRACK_ALLOCS, &Config::SetGuard},
+ "guard",
+ {FRONT_GUARD | REAR_GUARD | TRACK_ALLOCS, &Config::SetGuard},
},
{
- "front_guard", {FRONT_GUARD | TRACK_ALLOCS, &Config::SetFrontGuard},
+ "front_guard",
+ {FRONT_GUARD | TRACK_ALLOCS, &Config::SetFrontGuard},
},
{
- "rear_guard", {REAR_GUARD | TRACK_ALLOCS, &Config::SetRearGuard},
+ "rear_guard",
+ {REAR_GUARD | TRACK_ALLOCS, &Config::SetRearGuard},
},
{
- "backtrace", {BACKTRACE | TRACK_ALLOCS, &Config::SetBacktrace},
+ "backtrace",
+ {BACKTRACE | TRACK_ALLOCS, &Config::SetBacktrace},
},
{
"backtrace_enable_on_signal",
@@ -88,55 +92,74 @@
},
{
- "backtrace_dump_on_exit", {0, &Config::SetBacktraceDumpOnExit},
+ "backtrace_dump_on_exit",
+ {0, &Config::SetBacktraceDumpOnExit},
},
{
- "backtrace_dump_prefix", {0, &Config::SetBacktraceDumpPrefix},
+ "backtrace_dump_prefix",
+ {0, &Config::SetBacktraceDumpPrefix},
},
{
- "backtrace_full", {BACKTRACE_FULL, &Config::VerifyValueEmpty},
+ "backtrace_full",
+ {BACKTRACE_FULL, &Config::VerifyValueEmpty},
},
{
- "fill", {FILL_ON_ALLOC | FILL_ON_FREE, &Config::SetFill},
+ "fill",
+ {FILL_ON_ALLOC | FILL_ON_FREE, &Config::SetFill},
},
{
- "fill_on_alloc", {FILL_ON_ALLOC, &Config::SetFillOnAlloc},
+ "fill_on_alloc",
+ {FILL_ON_ALLOC, &Config::SetFillOnAlloc},
},
{
- "fill_on_free", {FILL_ON_FREE, &Config::SetFillOnFree},
+ "fill_on_free",
+ {FILL_ON_FREE, &Config::SetFillOnFree},
},
{
- "expand_alloc", {EXPAND_ALLOC, &Config::SetExpandAlloc},
+ "expand_alloc",
+ {EXPAND_ALLOC, &Config::SetExpandAlloc},
},
{
- "free_track", {FREE_TRACK | FILL_ON_FREE | TRACK_ALLOCS, &Config::SetFreeTrack},
+ "free_track",
+ {FREE_TRACK | FILL_ON_FREE | TRACK_ALLOCS, &Config::SetFreeTrack},
},
{
- "free_track_backtrace_num_frames", {0, &Config::SetFreeTrackBacktraceNumFrames},
+ "free_track_backtrace_num_frames",
+ {0, &Config::SetFreeTrackBacktraceNumFrames},
},
{
- "leak_track", {LEAK_TRACK | TRACK_ALLOCS, &Config::VerifyValueEmpty},
+ "leak_track",
+ {LEAK_TRACK | TRACK_ALLOCS, &Config::VerifyValueEmpty},
},
{
- "record_allocs", {RECORD_ALLOCS, &Config::SetRecordAllocs},
+ "record_allocs",
+ {RECORD_ALLOCS, &Config::SetRecordAllocs},
},
{
- "record_allocs_file", {0, &Config::SetRecordAllocsFile},
+ "record_allocs_file",
+ {0, &Config::SetRecordAllocsFile},
},
{
- "verify_pointers", {TRACK_ALLOCS, &Config::VerifyValueEmpty},
+ "verify_pointers",
+ {TRACK_ALLOCS, &Config::VerifyValueEmpty},
},
{
- "abort_on_error", {ABORT_ON_ERROR, &Config::VerifyValueEmpty},
+ "abort_on_error",
+ {ABORT_ON_ERROR, &Config::VerifyValueEmpty},
},
{
- "verbose", {VERBOSE, &Config::VerifyValueEmpty},
+ "verbose",
+ {VERBOSE, &Config::VerifyValueEmpty},
+ },
+ {
+ "check_unreachable_on_signal",
+ {CHECK_UNREACHABLE_ON_SIGNAL, &Config::VerifyValueEmpty},
},
};
@@ -380,6 +403,7 @@
backtrace_enabled_ = false;
backtrace_dump_on_exit_ = false;
backtrace_dump_prefix_ = DEFAULT_BACKTRACE_DUMP_PREFIX;
+ check_unreachable_signal_ = SIGRTMAX - 16;
// Process each option name we can find.
std::string option;