]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Darwin: update signal tramp, helgrind and drd suppressions
authorPaul Floyd <pjfloyd@wanadoo.fr>
Fri, 28 Nov 2025 21:49:25 +0000 (22:49 +0100)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Fri, 28 Nov 2025 21:49:25 +0000 (22:49 +0100)
Change a couple of testcase asserts to match Darwin quirks.
Signal tramp from Louis Brunner

coregrind/m_libcsignal.c
darwin17.supp
helgrind/tests/tc12_rwl_trivial.c
helgrind/tests/tc23_bogus_condwait.c
include/vki/vki-darwin.h

index d8563a4d020875ad00f1d487ba1e89215090d2d1..d28b0b9b21048dc398f4b18b74c31a5253de512e 100644 (file)
@@ -240,19 +240,29 @@ Int VG_(sigprocmask)( Int how, const vki_sigset_t* set, vki_sigset_t* oldset)
 
 #if defined(VGO_darwin)
 /* A helper function for sigaction on Darwin. */
-static 
-void darwin_signal_demux(void* a1, UWord a2, UWord a3, void* a4, void* a5) {
+static
+void darwin_signal_demux(void* catcher, UWord infostyle, UWord sig, void* sinfo, void* uctx
+# if defined(VGA_arm64)
+, void* token
+# endif
+) {
    VG_(debugLog)(2, "libcsignal",
-                    "PRE  demux sig, a2 = %lu, signo = %lu\n", a2, a3);
-   if (a2 == 1)
-      ((void(*)(int))a1) (a3);
+                    "PRE  demux sig, infostyle = %s, signo = %lu\n", infostyle == VKI_UC_TRAD ? "TRAD" : "FLAVOR", sig);
+   if (infostyle == VKI_UC_TRAD)
+      ((void(*)(int))catcher) (sig);
    else
-      ((void(*)(int,void*,void*))a1) (a3,a4,a5);
+      ((void(*)(int,void*,void*))catcher) (sig, sinfo, uctx);
    VG_(debugLog)(2, "libcsignal",
-                    "POST demux sig, a2 = %lu, signo = %lu\n", a2, a3);
-   VG_(do_syscall2)(__NR_sigreturn, (UWord)a5, 0x1E);
+                    "POST demux sig, infostyle = %s, signo = %lu\n", infostyle == VKI_UC_TRAD ? "TRAD" : "FLAVOR", sig);
+# if defined(VGA_arm64)
+   VG_(do_syscall3)(__NR_sigreturn, (UWord)uctx, VKI_UC_FLAVOR, (UWord)token);
+   /* NOTREACHED */
+   __asm__ __volatile__("udf #0");
+# else
+   VG_(do_syscall2)(__NR_sigreturn, (UWord)uctx, VKI_UC_FLAVOR);
    /* NOTREACHED */
    __asm__ __volatile__("ud2");
+# endif
 }
 #endif
 
index 6966f101cdced42b15375824b398bf65aa3f8449..528a9f139a0ac49d0461572d0398d5680a9f6b68 100644 (file)
    fun:dispatch_once_f
 }
 
+{
+   OSX1013:helgrind:nanosleep
+   Helgrind:Race
+   ...
+   fun:nanosleep
+}
+
 {
    OSX1013:drd:nanosleep
    drd:ConflictingAccess
    fun:gomp_barrier_wait
 }
 
+{
+   OSX1013:helgrind:_os_unfair_lock_lock_slow
+   Helgrind:Race
+   fun:_os_unfair_lock_lock_slow
+}
+
+{
+   OSX1013:helgrind:sem_trywait
+   Helgrind:Race
+   fun:sem_trywait
+}
+
 {
    OSX1013:drd:object_dispose
    drd:ConflictingAccess
index 35702ebb09f0c2a7615b22829069263661e7f1d1..24f312c663f7931745ffb59fe9237c2c13463f2b 100644 (file)
@@ -27,7 +27,7 @@ int main ( void )
 
   /* this should fail - lock is unowned now */
   r = pthread_rwlock_unlock( &rwl );
-#if defined(VGO_darwin) || defined(VGO_solaris) || defined(VGO_freebsd)
+#if defined(VGO_solaris) || defined(VGO_freebsd)
   assert(r != 0);
 #else
   assert(r == 0);
index f2ccf3517fd45ad3a68d6a1eec337694d73a4a20..b10674817960137a777ce252cf0cf4fd30ae0aa0 100644 (file)
@@ -90,7 +90,10 @@ int main ( void )
   r= pthread_join( my_rescuer, NULL ); assert(!r);
   r= pthread_join( grabber, NULL ); assert(!r);
 
-  r= my_sem_destroy( quit_now ); assert(!r);
+  r= my_sem_destroy( quit_now );
+#if !defined(VGO_darwin)
+  assert(!r);
+#endif
   return 0;
 }
 
index 5cffcd1b643a3b0cff56cfcc89481e7ab828230a..d7fb765eda072c2ca1ce1b1057f0ccece8755346 100644 (file)
@@ -526,6 +526,9 @@ typedef struct {
 //typedef  struct __sigaction  vki_sigaction_toK_t;
 //typedef  struct sigaction    vki_sigaction_fromK_t;
 
+#define VKI_UC_TRAD        1
+#define VKI_UC_FLAVOR     30
+
 typedef
    struct {
       void* ksa_handler;