]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Solaris syscall: Add support for lwp_cond_signal(171).
authorIvo Raisr <ivosh@ivosh.net>
Mon, 26 Oct 2015 16:13:05 +0000 (16:13 +0000)
committerIvo Raisr <ivosh@ivosh.net>
Mon, 26 Oct 2015 16:13:05 +0000 (16:13 +0000)
Fixes BZ#354392.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15718

NEWS
coregrind/m_syswrap/syswrap-solaris.c
include/vki/vki-scnums-solaris.h
memcheck/tests/solaris/scalar.c
memcheck/tests/solaris/scalar.stderr.exp

diff --git a/NEWS b/NEWS
index b4827452e44b9bde9f050316d49d25a82fd4e579..27fc53bac2bee13784e7973f86f40e2ed1742407 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -39,6 +39,7 @@ where XXXXXX is the bug number as listed below.
 353891  Assert 'bad_scanned_addr < VG_ROUNDDN(start+len, sizeof(Addr))' failed
 353917  unhandled amd64-solaris syscall fchdir(120)
 353920  unhandled amd64-solaris syscall: 170
+354392  unhandled amd64-solaris syscall: 171
 
 
 
index 216e53c69ee46a492339dc5505ea1148fa9644bb..4e2662c6c6384b662bf26ad73126708d4e1a8a25 100644 (file)
@@ -1014,6 +1014,7 @@ DECL_TEMPLATE(solaris, sys_lwp_private);
 DECL_TEMPLATE(solaris, sys_lwp_wait);
 DECL_TEMPLATE(solaris, sys_lwp_mutex_wakeup);
 DECL_TEMPLATE(solaris, sys_lwp_cond_wait);
+DECL_TEMPLATE(solaris, sys_lwp_cond_signal);
 DECL_TEMPLATE(solaris, sys_lwp_cond_broadcast);
 DECL_TEMPLATE(solaris, sys_pread);
 DECL_TEMPLATE(solaris, sys_pwrite);
@@ -7020,6 +7021,25 @@ POST(sys_lwp_cond_wait)
       POST_MEM_WRITE(ARG3, sizeof(vki_timespec_t));
 }
 
+PRE(sys_lwp_cond_signal)
+{
+   /* int lwp_cond_signal(lwp_cond_t *cvp); */
+   *flags |= SfMayBlock;
+   PRINT("sys_lwp_cond_signal( %#lx )", ARG1);
+   PRE_REG_READ1(long, "lwp_cond_signal", vki_lwp_cond_t *, cvp);
+
+   vki_lwp_cond_t *cvp = (vki_lwp_cond_t *) ARG1;
+   PRE_FIELD_READ("lwp_cond_signal(cvp->type)", cvp->vki_cond_type);
+   PRE_FIELD_READ("lwp_cond_signal(cvp->waiters_kernel)",
+                  cvp->vki_cond_waiters_kernel);
+}
+
+POST(sys_lwp_cond_signal)
+{
+   vki_lwp_cond_t *cvp = (vki_lwp_cond_t *) ARG1;
+   POST_FIELD_WRITE(cvp->vki_cond_waiters_kernel);
+}
+
 PRE(sys_lwp_cond_broadcast)
 {
    /* int lwp_cond_broadcast(lwp_cond_t *cvp); */
@@ -10407,6 +10427,7 @@ static SyscallTableEntry syscall_table[] = {
    SOLXY(__NR_lwp_wait,             sys_lwp_wait),              /* 167 */
    SOLXY(__NR_lwp_mutex_wakeup,     sys_lwp_mutex_wakeup),      /* 168 */
    SOLXY(__NR_lwp_cond_wait,        sys_lwp_cond_wait),         /* 170 */
+   SOLXY(__NR_lwp_cond_signal,      sys_lwp_cond_signal),       /* 171 */
    SOLX_(__NR_lwp_cond_broadcast,   sys_lwp_cond_broadcast),    /* 172 */
    SOLXY(__NR_pread,                sys_pread),                 /* 173 */
    SOLX_(__NR_pwrite,               sys_pwrite),                /* 174 */
index d6fe22ce3062cad82b7ce55bf36b8ec83eda7c2d..9037a6fb2273918959cbdf4cb879b75f0dd79840 100644 (file)
 #define __NR_lwp_wait                   SYS_lwp_wait
 #define __NR_lwp_mutex_wakeup           SYS_lwp_mutex_wakeup
 #define __NR_lwp_cond_wait              SYS_lwp_cond_wait
-//#define __NR_lwp_cond_signal            SYS_lwp_cond_signal
+#define __NR_lwp_cond_signal            SYS_lwp_cond_signal
 #define __NR_lwp_cond_broadcast         SYS_lwp_cond_broadcast
 #define __NR_pread                      SYS_pread
 #define __NR_pwrite                     SYS_pwrite
index 211b39bfe47786c6c65710e6648f02a71a18b636..a0e340e0439b218b860c0bb4b0dbfda7714329cf 100644 (file)
@@ -2111,7 +2111,8 @@ int main(void)
    SY(SYS_lwp_cond_wait, x0 + 1, x0 + 1, x0 + 1, x0); FAIL;
 
    /* SYS_lwp_cond_signal       171 */
-   /* XXX Missing wrapper. */
+   GO(SYS_lwp_cond_signal, "1s 2m");
+   SY(SYS_lwp_cond_signal, x0); FAIL;
 
    /* SYS_lwp_cond_broadcast    172 */
    GO(SYS_lwp_cond_broadcast, "1s 2m");
index d44723deea25eb8ad66ff52e53458018a8539a97..06e83e963fd4548e6c9c4572c2d865b239339e9b 100644 (file)
@@ -2625,6 +2625,20 @@ Syscall param lwp_cond_wait(tsp) points to unaddressable byte(s)
    ...
  Address 0x........ is not stack'd, malloc'd or (recently) free'd
 
+---------------------------------------------------------
+171:     SYS_lwp_cond_signal 1s 2m
+---------------------------------------------------------
+Syscall param lwp_cond_signal(cvp) contains uninitialised byte(s)
+   ...
+
+Syscall param lwp_cond_signal(cvp->type) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param lwp_cond_signal(cvp->waiters_kernel) points to unaddressable byte(s)
+   ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
 ---------------------------------------------------------
 172:  SYS_lwp_cond_broadcast 1s 2m
 ---------------------------------------------------------