ART: Add configurable signal to timeout_dumper
Bug: 134837513
Test: m test-art-host
Test: manual (decrease timeout and add signal param)
Change-Id: I2fad6c483e83134483210353fb27667478caf313
diff --git a/tools/timeout_dumper/timeout_dumper.cc b/tools/timeout_dumper/timeout_dumper.cc
index 08d2f4c..504d01f 100644
--- a/tools/timeout_dumper/timeout_dumper.cc
+++ b/tools/timeout_dumper/timeout_dumper.cc
@@ -34,6 +34,7 @@
#include <android-base/file.h>
#include <android-base/logging.h>
#include <android-base/macros.h>
+#include <android-base/parseint.h>
#include <android-base/stringprintf.h>
#include <android-base/strings.h>
#include <android-base/unique_fd.h>
@@ -84,10 +85,6 @@
sigset_t set_;
};
-int GetTimeoutSignal() {
- return SIGRTMIN + 2;
-}
-
} // namespace timeout_signal
namespace addr2line {
@@ -658,9 +655,9 @@
}
[[noreturn]]
-void SetupAndWait(pid_t forked_pid) {
+void SetupAndWait(pid_t forked_pid, int signal) {
timeout_signal::SignalSet signals;
- signals.Add(timeout_signal::GetTimeoutSignal());
+ signals.Add(signal);
signals.Block();
std::atomic<bool> saw_wif_stopped_for_main(false);
@@ -668,7 +665,7 @@
std::thread signal_catcher([&]() {
signals.Block();
int sig = signals.Wait();
- CHECK_EQ(sig, timeout_signal::GetTimeoutSignal());
+ CHECK_EQ(sig, signal);
DumpProcess(forked_pid, saw_wif_stopped_for_main);
@@ -684,6 +681,20 @@
} // namespace art
int main(int argc ATTRIBUTE_UNUSED, char** argv) {
+ int signal = SIGRTMIN + 2;
+
+ size_t index = 1u;
+ CHECK(argv[index] != nullptr);
+ if (strcmp(argv[index], "-s") == 0) {
+ index++;
+ CHECK(argv[index] != nullptr);
+ uint32_t signal_uint;
+ CHECK(android::base::ParseUint(argv[index], &signal_uint)) << "Signal not a number.";
+ signal = signal_uint;
+ index++;
+ CHECK(argv[index] != nullptr);
+ }
+
pid_t orig_ppid = getpid();
pid_t pid = fork();
@@ -696,12 +707,12 @@
_exit(2);
}
- execvp(argv[1], &argv[1]);
+ execvp(argv[index], &argv[index]);
_exit(3);
__builtin_unreachable();
}
- art::SetupAndWait(pid);
+ art::SetupAndWait(pid, signal);
__builtin_unreachable();
}