From: Ivo Raisr Date: Mon, 26 Oct 2015 16:13:05 +0000 (+0000) Subject: Solaris syscall: Add support for lwp_cond_signal(171). X-Git-Tag: svn/VALGRIND_3_12_0~305 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e7be5069c3221627c176abbba5156300b094be7c;p=thirdparty%2Fvalgrind.git Solaris syscall: Add support for lwp_cond_signal(171). Fixes BZ#354392. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15718 --- diff --git a/NEWS b/NEWS index b4827452e4..27fc53bac2 100644 --- 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 diff --git a/coregrind/m_syswrap/syswrap-solaris.c b/coregrind/m_syswrap/syswrap-solaris.c index 216e53c69e..4e2662c6c6 100644 --- a/coregrind/m_syswrap/syswrap-solaris.c +++ b/coregrind/m_syswrap/syswrap-solaris.c @@ -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 */ diff --git a/include/vki/vki-scnums-solaris.h b/include/vki/vki-scnums-solaris.h index d6fe22ce30..9037a6fb22 100644 --- a/include/vki/vki-scnums-solaris.h +++ b/include/vki/vki-scnums-solaris.h @@ -225,7 +225,7 @@ #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 diff --git a/memcheck/tests/solaris/scalar.c b/memcheck/tests/solaris/scalar.c index 211b39bfe4..a0e340e043 100644 --- a/memcheck/tests/solaris/scalar.c +++ b/memcheck/tests/solaris/scalar.c @@ -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"); diff --git a/memcheck/tests/solaris/scalar.stderr.exp b/memcheck/tests/solaris/scalar.stderr.exp index d44723deea..06e83e963f 100644 --- a/memcheck/tests/solaris/scalar.stderr.exp +++ b/memcheck/tests/solaris/scalar.stderr.exp @@ -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 ---------------------------------------------------------