@@ -451,8 +451,8 @@ void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem,
451
451
452
452
if (0 ) VG_ (printf )(
453
453
"wqthread_hijack: self %#lx, kport %#lx, "
454
- "stackaddr %#lx, workitem %#lx, reuse/flags %x , sp %#lx\n" ,
455
- self , kport , stackaddr , workitem , (UInt )reuse , sp );
454
+ "stackaddr %#lx, workitem %#lx, reuse/flags %#x, kevent_count %d , sp %#lx\n" ,
455
+ self , kport , stackaddr , workitem , (UInt )reuse , kevent_count , sp );
456
456
457
457
/* Start the thread with all signals blocked. VG_(scheduler) will
458
458
set the mask correctly when we finally get there. */
@@ -476,22 +476,14 @@ void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem,
476
476
/* For whatever reason, tst->os_state.pthread appear to have a
477
477
constant offset of 96 on 10.7, but zero on 10.6 and 10.5. No
478
478
idea why. */
479
- # if DARWIN_VERS <= DARWIN_10_6
479
+ # if DARWIN_VERS <= DARWIN_10_6 || DARWIN_VERS >= DARWIN_10_13
480
480
UWord magic_delta = 0 ;
481
481
# elif DARWIN_VERS == DARWIN_10_7 || DARWIN_VERS == DARWIN_10_8
482
482
UWord magic_delta = 0x60 ;
483
483
# elif DARWIN_VERS == DARWIN_10_9 \
484
484
|| DARWIN_VERS == DARWIN_10_10 \
485
485
|| DARWIN_VERS == DARWIN_10_11 \
486
- || DARWIN_VERS == DARWIN_10_12 \
487
- || DARWIN_VERS == DARWIN_10_13 \
488
- || DARWIN_VERS == DARWIN_10_14 \
489
- || DARWIN_VERS == DARWIN_10_15 \
490
- || DARWIN_VERS == DARWIN_11_00 \
491
- || DARWIN_VERS == DARWIN_12_00 \
492
- || DARWIN_VERS == DARWIN_13_00 \
493
- || DARWIN_VERS == DARWIN_14_00 \
494
- || DARWIN_VERS == DARWIN_15_00
486
+ || DARWIN_VERS == DARWIN_10_12
495
487
UWord magic_delta = 0xE0 ;
496
488
# else
497
489
# error "magic_delta: to be computed on new OS version"
@@ -514,6 +506,10 @@ void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem,
514
506
tid , (void * )tst , tst -> os_state .pthread , self );
515
507
516
508
vex = & tst -> arch .vex ;
509
+ if (tst -> os_state .pthread - magic_delta != self ) {
510
+ VG_ (printf )("wqthread_hijack reuse: tst->os_state.pthread %#lx vs self %#lx (diff: %#lx vs %#lx)\n" ,
511
+ tst -> os_state .pthread , self , tst -> os_state .pthread - self , magic_delta );
512
+ }
517
513
vg_assert (tst -> os_state .pthread - magic_delta == self );
518
514
}
519
515
else {
0 commit comments