https://bugs.kde.org/show_bug.cgi?id=512666
--- Comment #7 from Paul Floyd <[email protected]> --- Trying to debug the pth_once failure. I added diff --git a/drd/drd_load_store.c b/drd/drd_load_store.c index 968ec885e..51ebb73a0 100644 --- a/drd/drd_load_store.c +++ b/drd/drd_load_store.c @@ -379,6 +379,15 @@ static void instr_trace_mem_store(IRSB* const bb, IRExpr* const addr_expr, HWord size; tl_assert(sizeof(HWord) == 4 || sizeof(HWord) == 8); +if (data_expr_hi) { + IRType ty = typeOfIRExpr(bb->tyenv, data_expr_hi); + VG_(printf)("DRD: unexpected hi type:\n"); + ppIRType(typeOfIRExpr(bb->tyenv, data_expr_hi)); + VG_(printf)("\nIRExpr:\n"); + ppIRExpr(data_expr_hi); + VG_(printf)("\n"); + ppIRSB(bb); +} tl_assert(!data_expr_hi || typeOfIRExpr(bb->tyenv, data_expr_hi) == Ity_I32); ty_data_expr = typeOfIRExpr(bb->tyenv, data_expr_lo); The output is DRD: unexpected hi type: I64 IRExpr: t56 IRSB { t0:I64 t1:I64 t2:I64 t3:I64 t4:I32 t5:I32 t6:I32 t7:I32 t8:I32 t9:I32 t10:I32 t11:I32 t12:I32 t13:I32 t14:I32 t15:I32 t16:I64 t17:I64 t18:I64 t19:I64 t20:I64 t21:I64 t22:I64 t23:I64 t24:I1 t25:I64 t26:I64 t27:I64 t28:I32 t29:I32 t30:I32 t31:I32 t32:I32 t33:I32 t34:I64 t35:I64 t36:I64 t37:I32 t38:I64 t39:I32 t40:I64 t41:I64 t42:I64 t43:I64 t44:I32 t45:I64 t46:I32 t47:I64 t48:I64 t49:I64 t50:I64 t51:I32 t52:I64 t53:I32 t54:I64 t55:I64 t56:I64 t57:I64 t58:I32 t59:I64 t60:I32 t61:I64 t62:I64 t63:I64 t64:I1 t65:I64 t66:I1 t67:I64 t68:I64 t69:I64 t70:I64 t71:I64 t72:I64 t73:I64 t74:I64 t75:I64 t76:I64 t77:I64 t78:I64 t79:I64 t80:I64 t81:I64 t82:I32 t83:I64 t84:I64 t85:I64 t86:I32 t87:I64 t88:I32 t89:I64 t90:I64 t91:I64 t92:I64 t93:I1 t94:I64 t95:I64 t96:I64 t97:I64 t98:I64 t99:I64 IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp IR-NoOp ------ IMark(0xC8EC8A3, 4, 0) ------ t35 = GET:I64(136) t34 = Add64(t35,0x2F:I64) PUT(64) = t34 PUT(184) = 0x10C8EC8A7:I64 ------ IMark(0xC8EC8A7, 4, 0) ------ t1 = And64(t34,0xFFFFFFFFFFFFFFF0:I64) PUT(144) = 0x14:I64 PUT(152) = t1 PUT(160) = 0x0:I64 PUT(168) = 0x0:I64 PUT(64) = t1 PUT(184) = 0x10C8EC8AB:I64 ------ IMark(0xC8EC8AB, 2, 0) ------ t36 = 32Uto64(0x0:I32) PUT(16) = t36 t37 = 64to32(t36) t39 = 64to32(t36) t4 = Xor32(t37,t39) PUT(144) = 0x13:I64 t41 = 32Uto64(t4) PUT(152) = t41 PUT(160) = 0x0:I64 PUT(168) = 0x0:I64 t42 = 32Uto64(t4) PUT(16) = t42 PUT(184) = 0x10C8EC8AD:I64 ------ IMark(0xC8EC8AD, 2, 0) ------ t43 = 32Uto64(0x0:I32) PUT(32) = t43 t44 = 64to32(t43) t46 = 64to32(t43) t7 = Xor32(t44,t46) PUT(144) = 0x13:I64 t48 = 32Uto64(t7) PUT(152) = t48 PUT(160) = 0x0:I64 PUT(168) = 0x0:I64 t49 = 32Uto64(t7) PUT(32) = t49 PUT(184) = 0x10C8EC8AF:I64 ------ IMark(0xC8EC8AF, 2, 0) ------ t50 = 32Uto64(0x0:I32) PUT(24) = t50 t51 = 64to32(t50) t53 = 64to32(t50) t10 = Xor32(t51,t53) PUT(144) = 0x13:I64 t55 = 32Uto64(t10) PUT(152) = t55 PUT(160) = 0x0:I64 PUT(168) = 0x0:I64 t56 = 32Uto64(t10) PUT(24) = t56 PUT(184) = 0x10C8EC8B1:I64 ------ IMark(0xC8EC8B1, 2, 0) ------ t57 = 32Uto64(0x0:I32) PUT(40) = t57 t58 = 64to32(t57) t60 = 64to32(t57) t13 = Xor32(t58,t60) PUT(144) = 0x13:I64 t62 = 32Uto64(t13) PUT(152) = t62 PUT(160) = 0x0:I64 PUT(168) = 0x0:I64 t63 = 32Uto64(t13) PUT(40) = t63 PUT(184) = 0x10C8EC8B3:I64 ------ IMark(0xC8EC8B3, 5, 0) ------ t65 = And64(t1,0xF:I64) t64 = CmpNE64(t65,0x0:I64) if (t64) { PUT(184) = 0x10C8EC8B3:I64; exit-SigSEGV } PUT(184) = 0x10C8EC8CF:I64; exit-Boring } drd: drd_load_store.c:391 (void instr_trace_mem_store(IRSB *const, IRExpr *const, IRExpr *, IRExpr *, IRExpr *const)): Assertion '!data_expr_hi || typeOfIRExpr(bb->tyenv, data_expr_hi) == Ity_I32' failed. host stacktrace: ==10638== at 0x258026AC9: show_sched_status_wrk (m_libcassert.c:427) ==10638== by 0x258026E40: report_and_quit (m_libcassert.c:498) ==10638== by 0x258026E14: vgPlain_assert_fail (m_libcassert.c:569) ==10638== by 0x25800FAE8: instr_trace_mem_store (drd_load_store.c:391) ==10638== by 0x25800EECE: vgDrd_instrument (drd_load_store.c:763) ==10638== by 0x2580433D9: tool_instrument_then_gdbserver_if_needed (m_translate.c:242) ==10638== by 0x25812C044: LibVEX_FrontEnd (main_main.c:709) ==10638== by 0x25812C9B2: LibVEX_Translate (main_main.c:1293) ==10638== by 0x258042F63: vgPlain_translate (m_translate.c:1835) ==10638== by 0x2580E06CE: handle_chain_me (scheduler.c:1172) ==10638== by 0x2580DE5B3: vgPlain_scheduler (scheduler.c:0) ==10638== by 0x2580F24E5: run_a_thread_NORETURN (syswrap-darwin.c:125) sched status: running_tid=1 Thread 1: status = VgTs_Runnable (lwpid 771) ==10638== at 0x10C8EC8A3: pthread_rwlock_destroy (in /usr/lib/system/libsystem_pthread.dylib) ==10638== by 0x10C268E47: pthread_rwlock_destroy (drd_pthread_intercepts.c:1782) ==10638== by 0x100027A98: RWLock::~RWLock() (tsan_thread_wrappers_pthread.h:312) ==10638== by 0x100016234: RWLock::~RWLock() (tsan_thread_wrappers_pthread.h:312) ==10638== by 0x10C58AEEC: __cxa_finalize_ranges (in /usr/lib/system/libsystem_c.dylib) ==10638== by 0x10C58B1FD: exit (in /usr/lib/system/libsystem_c.dylib) ==10638== by 0x10C4A601B: start (in /usr/lib/system/libdyld.dylib) ==10638== by 0x1: ??? ==10638== by 0x110A4EC9F: ??? ==10638== by 0x110A4ECAF: ??? The IRExpr is t56 which itself was converted from 32 to 64bit: t56 = 32Uto64(t10) -- You are receiving this mail because: You are watching all bug changes.
