ASSERT failure using `reset_at_nth_thread 2` on test app
Describe the bug
DR crashes with an assert failure with the -reset_at_nth_thread 2
option. The assert failure is different on AArch64 and x86.
To Reproduce
bin64/drrun -enable_reset -reset_at_nth_thread 2 -- suite/tests/bin/linux.thread
Screenshots or Pasted Text On AArch64:
<proactive reset @ 1309 fragments>
Sideline thread started
<Application build/dynamorio/suite/tests/bin/linux.thread (33389). Internal Error: DynamoRIO debug check failure: Not implemented @src/dynamorio/core/unix/signal_linux_aarch64.c:53 (0)
(Error occurred @1327 frags)
version 8.0.18562, custom build
-no_dynamic_options -code_api -stack_size 56K -signal_stack_size 32K -max_elide_jmp 0 -max_elide_call 0 -enable_reset -reset_at_nth_thread 2 -early_inject -emulate_brk -no_inline_ignored_syscalls -native_exec_default_list '' -no_native_exec_managed_code -no_indcall2direct >
On x86:
<proactive reset @ 1736 fragments>
<Application build/dynamorio/suite/tests/bin/linux.thread (2261478). Internal Error: DynamoRIO debug check failure: src/dynamorio/core/dispatch.c:751 wherewasi == DR_WHERE_FCACHE || wherewasi == DR_WHERE_TRAMPOLINE || wherewasi == DR_WHERE_APP || (dcontext->go_native && wherewasi == DR_WHERE_DISPATCH)
(Error occurred @1736 frags)
version 8.0.18563, custom build
-no_dynamic_options -code_api -stack_size 56K -signal_stack_size 32K -max_elide_jmp 0 -max_elide_call 0 -reset_at_nth_thread 2 -early_inject -emulate_brk -no_inline_ignored_syscalls -native_exec_default_list '' -no_native_exec_managed_code -no_indcall2direct >
Versions Working on PR #4491
Additional context
The same issue comes up with -reset_at_created_thread_count 2
(this is a new flag tried while working on the above PR; this flag resets when created thread count reaches 2, unlike reset_at_nth_thread
which checks the active thread count). But the failure does not come up with -reset_at_created_thread_count 3
.
(Note that reset_at_nth_thread 3
doesn't invoke the failing path at all)