@@ -2457,6 +2457,7 @@ static const HChar *workqop_name(int op)
2457
2457
case VKI_WQOPS_SET_EVENT_MANAGER_PRIORITY : return "SET_EVENT_MANAGER_PRIORITY" ;
2458
2458
case VKI_WQOPS_THREAD_WORKLOOP_RETURN : return "THREAD_WORKLOOP_RETURN" ;
2459
2459
case VKI_WQOPS_SHOULD_NARROW : return "SHOULD_NARROW" ;
2460
+ case VKI_WQOPS_SETUP_DISPATCH : return "SETUP_DISPATCH" ;
2460
2461
default : return "?" ;
2461
2462
}
2462
2463
}
@@ -2514,11 +2515,29 @@ PRE(workq_ops)
2514
2515
// RK fixme need anything here?
2515
2516
// RK fixme may block?
2516
2517
break ;
2517
- case VKI_WQOPS_SETUP_DISPATCH :
2518
+ case VKI_WQOPS_SETUP_DISPATCH : {
2518
2519
// docs says: setup pthread workqueue-related operations
2520
+ #if DARWIN_VERS >= DARWIN_10_15
2521
+ #pragma pack(4)
2522
+ struct workq_dispatch_config {
2523
+ uint32_t wdc_version ;
2524
+ uint32_t wdc_flags ;
2525
+ uint64_t wdc_queue_serialno_offs ;
2526
+ uint64_t wdc_queue_label_offs ;
2527
+ };
2528
+ #pragma pack()
2529
+ PRE_MEM_READ ("workq_ops(item)" , ARG2 , MIN (sizeof (struct workq_dispatch_config ), SARG3 ));
2530
+ struct workq_dispatch_config * cfg = (struct workq_dispatch_config * )ARG2 ;
2531
+ if (cfg -> wdc_flags & ~VKI_WORKQ_DISPATCH_SUPPORTED_FLAGS ||
2532
+ cfg -> wdc_version < VKI_WORKQ_DISPATCH_MIN_SUPPORTED_VERSION ) {
2533
+ SET_STATUS_Failure ( VKI_ENOTSUP );
2534
+ }
2535
+ #endif
2519
2536
break ;
2537
+ }
2520
2538
default :
2521
- VG_ (printf )("UNKNOWN workq_ops option %ld\n" , ARG1 );
2539
+ PRINT ("workq_ops ( %lu [??], ... )" , ARG1 );
2540
+ log_decaying ("UNKNOWN workq_ops option %lu!" , ARG1 );
2522
2541
break ;
2523
2542
}
2524
2543
}
0 commit comments