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.

Reply via email to