]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Darwin DRD: redirs for semaphore functions master
authorPaul Floyd <pjfloyd@wanadoo.fr>
Sun, 14 Dec 2025 19:23:10 +0000 (20:23 +0100)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Sun, 14 Dec 2025 19:25:27 +0000 (20:25 +0100)
Like 2802b31ae644301ee641dcae20d1f84373615d54 for Helgrind.
Use the DRD script supported_sem_init in Helgrind tests that use
semaphores, it's clearer than just using tests/os_test

drd/drd_pthread_intercepts.c
helgrind/hg_intercepts.c
helgrind/tests/tc18_semabuse.vgtest
helgrind/tests/tc24_nonzero_sem.vgtest

index 0cd7c0be62defea508628a2ebf16612b4ecd471d..6e150ca4e9b80c1238c88c7247fc733382523cda 100644 (file)
@@ -202,6 +202,13 @@ ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBPTHREAD_SONAME,zf) argl_decl         \
    { return implf argl; }
 #endif
 
+#if defined(VGO_darwin)
+#define LIBC_FUNC(ret_ty, zf, implf, argl_decl, argl)                    \
+   ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBSYSTEM_KERNEL_SONAME,zf) argl_decl;           \
+   ret_ty VG_WRAP_FUNCTION_ZZ(VG_Z_LIBSYSTEM_KERNEL_SONAME,zf) argl_decl            \
+   { return implf argl; }
+#endif
+
 /**
  * Macro for generating three Valgrind interception functions: one with the
  * Z-encoded name zf, one with ZAZa ("@*") appended to the name zf and one
@@ -1491,7 +1498,7 @@ int sem_init_intercept(sem_t *sem, int pshared, unsigned int value)
    return ret;
 }
 
-#if defined(VGO_freebsd)
+#if defined(VGO_freebsd) || defined(VGO_darwin)
 LIBC_FUNC(int, semZuinit, sem_init_intercept,
           (sem_t *sem, int pshared, unsigned int value), (sem, pshared, value));
 #else
@@ -1534,7 +1541,7 @@ int sem_destroy_intercept(sem_t *sem)
    return ret;
 }
 
-#if defined(VGO_freebsd)
+#if defined(VGO_freebsd) || defined(VGO_darwin)
 LIBC_FUNC(int, semZudestroy, sem_destroy_intercept, (sem_t *sem), (sem));
 #else
 PTH_FUNCS(int, semZudestroy, sem_destroy_intercept, (sem_t *sem), (sem));
@@ -1570,7 +1577,7 @@ sem_t* sem_open_intercept(const char *name, int oflag, mode_t mode,
    return ret;
 }
 
-#if defined(VGO_freebsd)
+#if defined(VGO_freebsd) || defined(VGO_darwin)
 LIBC_FUNC(sem_t *, semZuopen, sem_open_intercept,
           (const char *name, int oflag, mode_t mode, unsigned int value),
           (name, oflag, mode, value));
@@ -1593,7 +1600,7 @@ static __always_inline int sem_close_intercept(sem_t *sem)
    return ret;
 }
 
-#if defined(VGO_freebsd)
+#if defined(VGO_freebsd) || defined(VGO_darwin)
 LIBC_FUNC(int, semZuclose, sem_close_intercept, (sem_t *sem), (sem));
 #else
 PTH_FUNCS(int, semZuclose, sem_close_intercept, (sem_t *sem), (sem));
@@ -1612,7 +1619,7 @@ static __always_inline int sem_wait_intercept(sem_t *sem)
    return ret;
 }
 
-#if defined(VGO_freebsd)
+#if defined(VGO_freebsd) || defined(VGO_darwin)
 LIBC_FUNC(int, semZuwait, sem_wait_intercept, (sem_t *sem), (sem));
 #else
 PTH_FUNCS(int, semZuwait, sem_wait_intercept, (sem_t *sem), (sem));
@@ -1635,7 +1642,7 @@ static __always_inline int sem_trywait_intercept(sem_t *sem)
    return ret;
 }
 
-#if defined(VGO_freebsd)
+#if defined(VGO_freebsd) || defined(VGO_darwin)
 LIBC_FUNC(int, semZutrywait, sem_trywait_intercept, (sem_t *sem), (sem));
 #else
 PTH_FUNCS(int, semZutrywait, sem_trywait_intercept, (sem_t *sem), (sem));
@@ -1658,7 +1665,7 @@ int sem_timedwait_intercept(sem_t *sem, const struct timespec *abs_timeout)
    return ret;
 }
 
-#if defined(VGO_freebsd)
+#if defined(VGO_freebsd) || defined(VGO_darwin)
 LIBC_FUNC(int, semZutimedwait, sem_timedwait_intercept,
           (sem_t *sem, const struct timespec *abs_timeout),
           (sem, abs_timeout));
@@ -1711,7 +1718,7 @@ static __always_inline int sem_post_intercept(sem_t *sem)
    return ret;
 }
 
-#if defined(VGO_freebsd)
+#if defined(VGO_freebsd) || defined(VGO_darwin)
 LIBC_FUNC(int, semZupost, sem_post_intercept, (sem_t *sem), (sem));
 #else
 PTH_FUNCS(int, semZupost, sem_post_intercept, (sem_t *sem), (sem));
index 09e3bea17994b7ae79b5f5109cf433442534356a..aa48ce02ac561ce0460c3825a741cc0968d4142b 100644 (file)
@@ -3118,6 +3118,7 @@ static int sem_init_WRK(sem_t* sem, int pshared, unsigned long value)
       return sem_init_WRK(sem, pshared, value);
    }
 #elif defined(VGO_darwin)
+// exists but fails with ENOSYS function not implemented
    LIBC_FUNC(int, semZuinit, // sem_init
                  sem_t* sem, int pshared, unsigned long value) {
       return sem_init_WRK(sem, pshared, value);
@@ -3206,6 +3207,7 @@ static int sem_destroy_WRK(sem_t* sem)
       return sem_destroy_WRK(sem);
    }
 #elif defined(VGO_darwin)
+// exists but fails with ENOSYS function not implemented
    LIBC_FUNC(int, semZudestroy,  // sem_destroy
                  sem_t* sem) {
       return sem_destroy_WRK(sem);
@@ -3274,6 +3276,7 @@ static int sem_wait_WRK(sem_t* sem)
       return sem_wait_WRK(sem);
    }
 #elif defined(VGO_darwin)
+// exists but fails with EBADF bad file number
    LIBC_FUNC(int, semZuwait, sem_t* sem) { /* sem_wait */
       return sem_wait_WRK(sem);
    }
index fe4d22ba17ee792f95706da5aa1fd383910c7e23..4818d739d41137fbf7528861c0ff58a24ea3eea1 100644 (file)
@@ -1 +1,2 @@
+prereq: ../../drd/tests/supported_sem_init
 prog: tc18_semabuse
index 1a43121eb7208cdf0ed59fda07336e2ce09d8215..87f4b8bfd112ac545388f97fb080a5c76797eaf4 100644 (file)
@@ -1,2 +1,3 @@
+prereq: ../../drd/tests/supported_sem_init
 prog: tc24_nonzero_sem
 vgopts: --hg-sanity-flags=111111