dhat will crash on x86 (32bit) because it doesn't handle Vg_CoreClientReq in its track_post_mem_write. dh_handle_noninsn_write will be called with Vg_CoreClientReq during shutdown when trying to setup an argument for the freeres_wrapper(). On other architectures this will be done through a register, but on x86 we setup the argument on the stack. See final_tidyup () in coregrind/m_main.c. Proposed fix. Just handle it like a syscall memory argument write: diff --git a/dhat/dh_main.c b/dhat/dh_main.c index 47a9327bd..a93332884 100644 --- a/dhat/dh_main.c +++ b/dhat/dh_main.c @@ -794,6 +794,7 @@ void dh_handle_noninsn_write ( CorePart part, ThreadId tid, { switch (part) { case Vg_CoreSysCall: + case Vg_CoreClientReq: dh_handle_write(base, size); break; case Vg_CoreSignal:
commit 4960f47c7dc39032a216c41b991dd138b91e5e5d Author: Mark Wielaard <mark@klomp.org> Date: Wed Apr 10 01:22:37 2019 +0200 dhat is broken on x86 (32bit) dhat will crash on x86 (32bit) because it doesn't handle Vg_CoreClientReq in its track_post_mem_write. dh_handle_noninsn_write will be called with Vg_CoreClientReq during shutdown when trying to setup an argument for the freeres_wrapper(). On other architectures this will be done through a register, but on x86 we setup the argument on the stack. See final_tidyup () in coregrind/m_main.c. Just handle it like a syscall memory argument write. https://bugs.kde.org/show_bug.cgi?id=406354