Fix check for thread unwind.
If a process requires executing fallback unwinder and the thread
crashing is not the main thread, the wrong unwinder is used.
Fix this case, and add a new unit test that causes an abort in
the non main thread.
Bug: 233721755
Test: New unit test passes with fix and fails without.
Test: Ran debuggerd on swcodec process and it still dumps all threads.
Change-Id: I70fffc5d680256ce867e7a1d427593b584259160
Merged-In: I70fffc5d680256ce867e7a1d427593b584259160
(cherry picked from commit 2d5d46ca85)
This commit is contained in:
parent
321d47639e
commit
303c6bef77
1 changed files with 23 additions and 0 deletions
|
|
@ -1463,6 +1463,29 @@ TEST_F(CrasherTest, seccomp_tombstone) {
|
|||
ASSERT_BACKTRACE_FRAME(result, "bar");
|
||||
}
|
||||
|
||||
TEST_F(CrasherTest, seccomp_tombstone_thread_abort) {
|
||||
int intercept_result;
|
||||
unique_fd output_fd;
|
||||
|
||||
static const auto dump_type = kDebuggerdTombstone;
|
||||
StartProcess(
|
||||
[]() {
|
||||
std::thread abort_thread([] { abort(); });
|
||||
abort_thread.join();
|
||||
},
|
||||
&seccomp_fork);
|
||||
|
||||
StartIntercept(&output_fd, dump_type);
|
||||
FinishCrasher();
|
||||
AssertDeath(SIGABRT);
|
||||
FinishIntercept(&intercept_result);
|
||||
ASSERT_EQ(1, intercept_result) << "tombstoned reported failure";
|
||||
|
||||
std::string result;
|
||||
ConsumeFd(std::move(output_fd), &result);
|
||||
ASSERT_BACKTRACE_FRAME(result, "abort");
|
||||
}
|
||||
|
||||
TEST_F(CrasherTest, seccomp_backtrace) {
|
||||
int intercept_result;
|
||||
unique_fd output_fd;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue