aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriraisr <iraisr@a5019735-40e9-0310-863c-91ae7b9d1cf9>2015-10-12 19:10:42 +0000
committeriraisr <iraisr@a5019735-40e9-0310-863c-91ae7b9d1cf9>2015-10-12 19:10:42 +0000
commit7d4aa19d6f2d67bd894015653c00795a0fbd4b74 (patch)
treecd844d19b8211696730959b772955c27c0173fa1
parentd7440ad4b2d9dccb2342905396b85b40131b3f65 (diff)
downloadvalgrind-7d4aa19d6f2d67bd894015653c00795a0fbd4b74.tar.gz
Solaris syscall: Add support for pset family (207).
Provide scalar tests as well. Fixes BZ #353398. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15700 a5019735-40e9-0310-863c-91ae7b9d1cf9
-rw-r--r--NEWS1
-rw-r--r--configure.ac25
-rw-r--r--coregrind/m_syswrap/syswrap-solaris.c208
-rw-r--r--include/vki/vki-scnums-solaris.h2
-rw-r--r--include/vki/vki-solaris.h22
-rw-r--r--memcheck/tests/solaris/scalar.c110
-rw-r--r--memcheck/tests/solaris/scalar.stderr.exp231
7 files changed, 596 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index 0662e7d5e..394d32271 100644
--- a/NEWS
+++ b/NEWS
@@ -34,6 +34,7 @@ where XXXXXX is the bug number as listed below.
353083 arm64 doesn't implement various xattr system calls
353084 arm64 doesn't support sigpending system call
353370 don't advertise RDRAND in cpuid for Core-i7-4910-like avx2 machine
+353398 WARNING: unhandled amd64-solaris syscall: 207
diff --git a/configure.ac b/configure.ac
index b848de354..e93c882b8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3142,6 +3142,30 @@ AC_MSG_RESULT([no])
AM_CONDITIONAL(SOLARIS_TSOL_CLEARANCE, test x$solaris_tsol_clearance = xyes)
+# Solaris-specific check determining if the new pset() syscall subcode
+# PSET_GET_NAME is available. This subcode was added in Solaris 12 but
+# is missing on illumos and Solaris 11.
+#
+# C-level symbol: SOLARIS_PSET_GET_NAME
+# Automake-level symbol: SOLARIS_PSET_GET_NAME
+#
+AC_MSG_CHECKING([for PSET_GET_NAME (Solaris-specific)])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/pset.h>
+]], [[
+ return !(PSET_GET_NAME);
+]])], [
+solaris_pset_get_name=yes
+AC_MSG_RESULT([yes])
+AC_DEFINE([SOLARIS_PSET_GET_NAME], 1,
+ [Define to 1 if you have the `PSET_GET_NAME' constants.])
+], [
+solaris_pset_get_name=no
+AC_MSG_RESULT([no])
+])
+AM_CONDITIONAL(SOLARIS_PSET_GET_NAME, test x$solaris_pset_get_name = xyes)
+
+
# Solaris-specific check determining if the utimesys() syscall is
# available (on illumos and older Solaris).
#
@@ -3450,6 +3474,7 @@ AM_CONDITIONAL(SOLARIS_FREALPATHAT_SYSCALL, false)
AM_CONDITIONAL(SOLARIS_UUIDSYS_SYSCALL, false)
AM_CONDITIONAL(SOLARIS_TNDB_GET_TNIP, false)
AM_CONDITIONAL(SOLARIS_TSOL_CLEARANCE, false)
+AM_CONDITIONAL(SOLARIS_PSET_GET_NAME, false)
AM_CONDITIONAL(SOLARIS_UTIMESYS_SYSCALL, false)
AM_CONDITIONAL(SOLARIS_UTIMENSAT_SYSCALL, false)
AM_CONDITIONAL(SOLARIS_SPAWN_SYSCALL, false)
diff --git a/coregrind/m_syswrap/syswrap-solaris.c b/coregrind/m_syswrap/syswrap-solaris.c
index d2f831e27..6ec33a36d 100644
--- a/coregrind/m_syswrap/syswrap-solaris.c
+++ b/coregrind/m_syswrap/syswrap-solaris.c
@@ -1035,6 +1035,7 @@ DECL_TEMPLATE(solaris, sys_timer_getoverrun);
DECL_TEMPLATE(solaris, sys_facl);
DECL_TEMPLATE(solaris, sys_door);
DECL_TEMPLATE(solaris, sys_schedctl);
+DECL_TEMPLATE(solaris, sys_pset);
DECL_TEMPLATE(solaris, sys_resolvepath);
DECL_TEMPLATE(solaris, sys_lwp_mutex_timedlock);
DECL_TEMPLATE(solaris, sys_lwp_rwlock_sys);
@@ -9115,6 +9116,210 @@ POST(sys_schedctl)
POST_MEM_WRITE(a, sizeof(struct vki_sc_shared));
}
+PRE(sys_pset)
+{
+ /* Kernel: int pset(int subcode, long arg1, long arg2, long arg3,
+ long arg4); */
+ switch (ARG1 /* subcode */) {
+ case VKI_PSET_CREATE:
+ /* Libc: int pset_create(psetid_t *newpset); */
+ PRINT("sys_pset ( %ld, %#lx )", SARG1, ARG2);
+ PRE_REG_READ2(long, SC2("pset", "create"), int, subcode,
+ vki_psetid_t *, newpset);
+ PRE_MEM_WRITE("pset(newpset)", ARG2, sizeof(vki_psetid_t));
+ break;
+ case VKI_PSET_DESTROY:
+ /* Libc: int pset_destroy(psetid_t pset); */
+ PRINT("sys_pset ( %ld, %ld )", SARG1, SARG2);
+ PRE_REG_READ2(long, SC2("pset", "destroy"), int, subcode,
+ vki_psetid_t, pset);
+ break;
+ case VKI_PSET_ASSIGN:
+ /* Libc: int pset_assign(psetid_t pset, processorid_t cpu,
+ psetid_t *opset); */
+ PRINT("sys_pset ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
+ PRE_REG_READ4(long, SC2("pset", "assign"), int, subcode,
+ vki_psetid_t, pset, vki_processorid_t, cpu,
+ vki_psetid_t *, opset);
+ if (ARG4 != 0)
+ PRE_MEM_WRITE("pset(opset)", ARG4, sizeof(vki_psetid_t));
+ break;
+ case VKI_PSET_INFO:
+ /* Libc: int pset_info(psetid_t pset, int *type, uint_t *numcpus,
+ processorid_t *cpulist); */
+ PRINT("sys_pset ( %ld, %ld, %#lx, %#lx, %#lx )", SARG1, SARG2, ARG3,
+ ARG4, ARG5);
+ PRE_REG_READ5(long, SC2("pset", "info"), int, subcode, vki_psetid_t, pset,
+ int *, type, vki_uint_t *, numcpus,
+ vki_processorid_t *, cpulist);
+ if (ARG3 != 0)
+ PRE_MEM_WRITE("pset(type)", ARG3, sizeof(int));
+ if (ARG4 != 0)
+ PRE_MEM_WRITE("pset(numcpus)", ARG4, sizeof(vki_uint_t));
+ if ((ARG4 != 0) && (ARG5 != 0)) {
+ vki_uint_t *numcpus = (vki_uint_t *) ARG4;
+ if (ML_(safe_to_deref(numcpus, sizeof(vki_uint_t)))) {
+ PRE_MEM_WRITE("pset(cpulist)", ARG5,
+ *numcpus * sizeof(vki_processorid_t));
+ /* If cpulist buffer is not large enough, it will hold only as many
+ entries as fit in the buffer. However numcpus will contain the
+ real number of cpus which will be greater than originally passed
+ in. Stash the original value in unused ARG6. */
+ ARG6 = *numcpus;
+ }
+ }
+ break;
+ case VKI_PSET_BIND:
+ /* Libc: int pset_bind(psetid_t pset, idtype_t idtype, id_t id,
+ psetid_t *opset); */
+ PRINT("sys_pset ( %ld, %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3,
+ SARG4, ARG5);
+ PRE_REG_READ5(long, SC2("pset", "bind"), int, subcode, vki_psetid_t, pset,
+ vki_idtype_t, idtype, vki_id_t, id, vki_psetid_t *, opset);
+ if (ARG5 != 0)
+ PRE_MEM_WRITE("pset(opset)", ARG5, sizeof(vki_psetid_t));
+ break;
+ case VKI_PSET_BIND_LWP:
+ /* Libc: int pset_bind_lwp(psetid_t pset, id_t id, pid_t pid,
+ psetid_t *opset); */
+ PRINT("sys_pset ( %ld, %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3,
+ SARG4, ARG5);
+ PRE_REG_READ5(long, SC2("pset", "bind_lwp"), int, subcode,
+ vki_psetid_t, pset, vki_id_t, id, vki_pid_t, pid,
+ vki_psetid_t *, opset);
+ if (ARG5 != 0)
+ PRE_MEM_WRITE("pset(opset)", ARG5, sizeof(vki_psetid_t));
+ break;
+ case VKI_PSET_GETLOADAVG:
+ /* Libc: int pset_getloadavg(psetid_t pset, double loadavg[],
+ int nelem); */
+ PRINT("sys_pset ( %ld, %ld, %#lx, %ld )", SARG1, SARG2, ARG3, SARG4);
+ PRE_REG_READ4(long, SC2("pset", "getloadavg"), int, subcode,
+ vki_psetid_t, pset, double, loadavg[], int, nelem);
+ if (ARG3 != 0)
+ PRE_MEM_WRITE("pset(loadavg)", ARG3, SARG4 * sizeof(double));
+ break;
+ case VKI_PSET_LIST:
+ /* Libc: int pset_list(psetid_t *psetlist, uint_t *numpsets); */
+ PRINT("sys_pset ( %ld, %#lx, %#lx )", SARG1, ARG2, ARG3);
+ PRE_REG_READ3(long, SC2("pset", "list"), int, subcode,
+ vki_psetid_t *, psetlist, vki_uint_t *, numpsets);
+ if (ARG3 != 0)
+ PRE_MEM_WRITE("pset(numpsets)", ARG3, sizeof(vki_uint_t));
+ if ((ARG2 != 0) && (ARG3 != 0)) {
+ vki_uint_t *numpsets = (vki_uint_t *) ARG3;
+ if (ML_(safe_to_deref(numpsets, sizeof(vki_uint_t)))) {
+ PRE_MEM_WRITE("pset(psetlist)", ARG2,
+ *numpsets * sizeof(vki_psetid_t));
+ /* If psetlist buffer is not large enough, it will hold only as many
+ entries as fit in the buffer. However numpsets will contain the
+ real number of processor sets which will be greater than
+ originally passed in. Stash the original value in unused ARG6. */
+ ARG6 = *numpsets;
+ }
+ }
+ break;
+# if defined(SOLARIS_PSET_GET_NAME)
+ case VKI_PSET_GET_NAME:
+ /* Libc: int pset_get_name(psetid_t psetid, char *buf, uint_t len); */
+ PRINT("sys_pset ( %ld, %ld, %#lx, %ld )", SARG1, SARG2, ARG3, SARG4);
+ PRE_REG_READ4(long, SC2("pset", "get_name"), int, subcode,
+ vki_psetid_t, pset, char *, buf, vki_uint_t, len);
+ PRE_MEM_WRITE("pset(buf)", ARG3, ARG4);
+ break;
+# endif /* SOLARIS_PSET_GET_NAME */
+ case VKI_PSET_SETATTR:
+ /* Libc: int pset_setattr(psetid_t pset, uint_t attr); */
+ PRINT("sys_pset ( %ld, %ld, %ld )", SARG1, SARG2, ARG3);
+ PRE_REG_READ3(long, SC2("pset", "setattr"), int, subcode,
+ vki_psetid_t, pset, vki_uint_t, attr);
+ break;
+ case VKI_PSET_GETATTR:
+ /* Libc: int pset_getattr(psetid_t pset, uint_t *attr); */
+ PRINT("sys_pset ( %ld, %ld, %#lx )", SARG1, SARG2, ARG3);
+ PRE_REG_READ3(long, SC2("pset", "getattr"), int, subcode,
+ vki_psetid_t, pset, vki_uint_t *, attr);
+ PRE_MEM_WRITE("pset(attr)", ARG3, sizeof(vki_uint_t));
+ break;
+ case VKI_PSET_ASSIGN_FORCED:
+ /* Libc: int pset_assign_forced(psetid_t pset, processorid_t cpu,
+ psetid_t *opset); */
+ PRINT("sys_pset ( %ld, %ld, %ld, %#lx )", SARG1, SARG2, SARG3, ARG4);
+ PRE_REG_READ4(long, SC2("pset", "assign_forced"), int, subcode,
+ vki_psetid_t, pset, vki_processorid_t, cpu,
+ vki_psetid_t *, opset);
+ if (ARG4 != 0)
+ PRE_MEM_WRITE("pset(opset)", ARG4, sizeof(vki_psetid_t));
+ break;
+ default:
+ VG_(unimplemented)("Syswrap of pset syscall with subcode %ld.", SARG1);
+ /*NOTREACHED*/
+ break;
+ }
+}
+
+POST(sys_pset)
+{
+ switch (ARG1 /*subcode*/) {
+ case VKI_PSET_CREATE:
+ POST_MEM_WRITE(ARG2, sizeof(vki_psetid_t));
+ break;
+ case VKI_PSET_DESTROY:
+ break;
+ case VKI_PSET_ASSIGN:
+ if (ARG4 != 0)
+ POST_MEM_WRITE(ARG4, sizeof(vki_psetid_t));
+ break;
+ case VKI_PSET_INFO:
+ if (ARG3 != 0)
+ POST_MEM_WRITE(ARG3, sizeof(int));
+ if (ARG4 != 0)
+ POST_MEM_WRITE(ARG4, sizeof(vki_uint_t));
+ if ((ARG4 != 0) && (ARG5 != 0)) {
+ vki_uint_t *numcpus = (vki_uint_t *) ARG4;
+ POST_MEM_WRITE(ARG5, MIN(*numcpus, ARG6) * sizeof(vki_processorid_t));
+ }
+ break;
+ case VKI_PSET_BIND:
+ if (ARG5 != 0)
+ POST_MEM_WRITE(ARG5, sizeof(vki_psetid_t));
+ break;
+ case VKI_PSET_BIND_LWP:
+ if (ARG5 != 0)
+ POST_MEM_WRITE(ARG5, sizeof(vki_psetid_t));
+ break;
+ case VKI_PSET_GETLOADAVG:
+ if (ARG3 != 0)
+ POST_MEM_WRITE(ARG3, MIN(SARG4, VKI_LOADAVG_NSTATS) * sizeof(double));
+ break;
+ case VKI_PSET_LIST:
+ if (ARG3 != 0)
+ POST_MEM_WRITE(ARG3, sizeof(vki_uint_t));
+ if ((ARG2 != 0) && (ARG3 != 0)) {
+ vki_uint_t *numpsets = (vki_uint_t *) ARG3;
+ POST_MEM_WRITE(ARG2, MIN(*numpsets, ARG6) * sizeof(vki_psetid_t));
+ }
+ break;
+# if defined(SOLARIS_PSET_GET_NAME)
+ case VKI_PSET_GET_NAME:
+ POST_MEM_WRITE(ARG3, VG_(strlen)((HChar *) ARG3) + 1);
+ break;
+# endif /* SOLARIS_PSET_GET_NAME */
+ case VKI_PSET_SETATTR:
+ break;
+ case VKI_PSET_GETATTR:
+ POST_MEM_WRITE(ARG3, sizeof(vki_uint_t));
+ break;
+ case VKI_PSET_ASSIGN_FORCED:
+ if (ARG4 != 0)
+ POST_MEM_WRITE(ARG4, sizeof(vki_psetid_t));
+ break;
+ default:
+ vg_assert(0);
+ break;
+ }
+}
+
PRE(sys_resolvepath)
{
/* int resolvepath(const char *path, char *buf, size_t bufsiz); */
@@ -9408,7 +9613,7 @@ PRE(sys_zone)
break;
case VKI_ZONE_LOOKUP:
/* Libc: zoneid_t zone_lookup(const char *name); */
- PRINT("sys_zone ( %ld, %#lx )", SARG1, ARG2);
+ PRINT("sys_zone ( %ld, %#lx(%s) )", SARG1, ARG2, (HChar *) ARG2);
PRE_REG_READ2(long, SC2("zone", "lookup"), int, cmd,
const char *, name);
if (ARG2)
@@ -10197,6 +10402,7 @@ static SyscallTableEntry syscall_table[] = {
GENX_(__NR_setreuid, sys_setreuid), /* 202 */
GENX_(__NR_setregid, sys_setregid), /* 202 */
SOLXY(__NR_schedctl, sys_schedctl), /* 206 */
+ SOLXY(__NR_pset, sys_pset), /* 207 */
SOLXY(__NR_resolvepath, sys_resolvepath), /* 209 */
SOLXY(__NR_lwp_mutex_timedlock, sys_lwp_mutex_timedlock), /* 210 */
SOLXY(__NR_lwp_sema_timedwait, sys_lwp_sema_timedwait), /* 211 */
diff --git a/include/vki/vki-scnums-solaris.h b/include/vki/vki-scnums-solaris.h
index 92831f0d0..dcc5b3235 100644
--- a/include/vki/vki-scnums-solaris.h
+++ b/include/vki/vki-scnums-solaris.h
@@ -262,7 +262,7 @@
//#define __NR_install_utrap SYS_install_utrap
//#define __NR_signotify SYS_signotify
#define __NR_schedctl SYS_schedctl
-//#define __NR_pset SYS_pset
+#define __NR_pset SYS_pset
//#define SYS_sparc_utrap_install
#define __NR_resolvepath SYS_resolvepath
#define __NR_lwp_mutex_timedlock SYS_lwp_mutex_timedlock
diff --git a/include/vki/vki-solaris.h b/include/vki/vki-solaris.h
index cfd0810cd..cc3b9d975 100644
--- a/include/vki/vki-solaris.h
+++ b/include/vki/vki-solaris.h
@@ -581,6 +581,10 @@ typedef struct vki_kcf_door_arg_s {
#define vki_semid64_ds semid_ds64
+#include <sys/loadavg.h>
+#define VKI_LOADAVG_NSTATS LOADAVG_NSTATS
+
+
#include <sys/lwp.h>
#define VKI_LWP_DAEMON LWP_DAEMON
#define VKI_LWP_FSBASE _LWP_FSBASE
@@ -770,6 +774,24 @@ typedef struct vki_kcf_door_arg_s {
#define vki_procset_t procset_t
+#include <sys/pset.h>
+#define VKI_PSET_CREATE PSET_CREATE
+#define VKI_PSET_DESTROY PSET_DESTROY
+#define VKI_PSET_ASSIGN PSET_ASSIGN
+#define VKI_PSET_INFO PSET_INFO
+#define VKI_PSET_BIND PSET_BIND
+#define VKI_PSET_GETLOADAVG PSET_GETLOADAVG
+#define VKI_PSET_LIST PSET_LIST
+#define VKI_PSET_SETATTR PSET_SETATTR
+#define VKI_PSET_GETATTR PSET_GETATTR
+#define VKI_PSET_ASSIGN_FORCED PSET_ASSIGN_FORCED
+#define VKI_PSET_BIND_LWP PSET_BIND_LWP
+#if defined(SOLARIS_PSET_GET_NAME)
+#define VKI_PSET_GET_NAME PSET_GET_NAME
+#endif /* SOLARIS_PSET_GET_NAME */
+#define vki_psetid_t psetid_t
+
+
#include <sys/regset.h>
#define vki_prgregset_t prgregset_t
diff --git a/memcheck/tests/solaris/scalar.c b/memcheck/tests/solaris/scalar.c
index 281a2ed27..e2693154d 100644
--- a/memcheck/tests/solaris/scalar.c
+++ b/memcheck/tests/solaris/scalar.c
@@ -1188,6 +1188,102 @@ static void sys_door5(void)
SY(SYS_door, x0, x0 + &params, x0, x0, x0, x0 + DOOR_CALL); FAIL;
}
+__attribute__((noinline))
+static void sys_pset(void)
+{
+ GO(SYS_pset, "(CREATE) 2s 1m");
+ SY(SYS_pset, x0 + PSET_CREATE, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset2(void)
+{
+ GO(SYS_pset, "(DESTROY) 2s 0m");
+ SY(SYS_pset, x0 + PSET_DESTROY, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset3(void)
+{
+ GO(SYS_pset, "(ASSIGN) 4s 1m");
+ SY(SYS_pset, x0 + PSET_ASSIGN, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset4(void)
+{
+ GO(SYS_pset, "(INFO) 5s 3m");
+ SY(SYS_pset, x0 + PSET_INFO, x0 + 1, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset5(void)
+{
+ int type;
+ uint_t numcpus = x0 + 1;
+
+ GO(SYS_pset, "(INFO) 5s 1m");
+ SY(SYS_pset, x0 + PSET_INFO, x0 + 1, x0 + &type, x0 + &numcpus,
+ x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset6(void)
+{
+ GO(SYS_pset, "(BIND) 5s 1m");
+ SY(SYS_pset, x0 + PSET_BIND, x0 + 1, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset7(void)
+{
+ GO(SYS_pset, "(BIND_LWP) 5s 1m");
+ SY(SYS_pset, x0 + PSET_BIND_LWP, x0 + 1, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset8(void)
+{
+ GO(SYS_pset, "(GETLOADAVG) 4s 1m");
+ SY(SYS_pset, x0 + PSET_GETLOADAVG, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset9(void)
+{
+ GO(SYS_pset, "(LIST) 3s 1m");
+ SY(SYS_pset, x0 + PSET_LIST, x0 + 1, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset10(void)
+{
+ uint_t numpsets = x0 + 1;
+
+ GO(SYS_pset, "(LIST) 3s 1m");
+ SY(SYS_pset, x0 + PSET_LIST, x0 + 1, x0 + &numpsets);
+}
+
+__attribute__((noinline))
+static void sys_pset11(void)
+{
+ GO(SYS_pset, "(SETATTR) 3s 0m");
+ SY(SYS_pset, x0 + PSET_SETATTR, x0, x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset12(void)
+{
+ GO(SYS_pset, "(GETATTR) 3s 1m");
+ SY(SYS_pset, x0 + PSET_GETATTR, x0, x0 + 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_pset13(void)
+{
+ GO(SYS_pset, "(ASSIGN_FORCED) 4s 1m");
+ SY(SYS_pset, x0 + PSET_ASSIGN_FORCED, x0 + 1, x0 + 1, x0 + 1); FAIL;
+}
__attribute__((noinline))
static void sys_lwp_rwlock(void)
@@ -2204,7 +2300,19 @@ int main(void)
SY(SYS_schedctl); SUCC;
/* SYS_pset 207 */
- /* XXX Missing wrapper. */
+ sys_pset();
+ sys_pset2();
+ sys_pset3();
+ sys_pset4();
+ sys_pset5();
+ sys_pset6();
+ sys_pset7();
+ sys_pset8();
+ sys_pset9();
+ sys_pset10();
+ sys_pset11();
+ sys_pset12();
+ sys_pset13();
/* SYS_sparc_utrap_install 208 */
/* XXX Missing wrapper. */
diff --git a/memcheck/tests/solaris/scalar.stderr.exp b/memcheck/tests/solaris/scalar.stderr.exp
index 969e1113f..241f283e9 100644
--- a/memcheck/tests/solaris/scalar.stderr.exp
+++ b/memcheck/tests/solaris/scalar.stderr.exp
@@ -4142,6 +4142,237 @@ Syscall param setregid(egid) contains uninitialised byte(s)
206: SYS_schedctl 0s 0m
---------------------------------------------------------
---------------------------------------------------------
+207: SYS_pset (CREATE) 2s 1m
+---------------------------------------------------------
+Syscall param pset_create(subcode) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_create(newpset) contains uninitialised byte(s)
+ ...
+
+Syscall param pset(newpset) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207: SYS_pset (DESTROY) 2s 0m
+---------------------------------------------------------
+Syscall param pset_destroy(subcode) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_destroy(pset) contains uninitialised byte(s)
+ ...
+
+---------------------------------------------------------
+207: SYS_pset (ASSIGN) 4s 1m
+---------------------------------------------------------
+Syscall param pset_assign(subcode) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_assign(pset) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_assign(cpu) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_assign(opset) contains uninitialised byte(s)
+ ...
+
+Syscall param pset(opset) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207: SYS_pset (INFO) 5s 3m
+---------------------------------------------------------
+Syscall param pset_info(subcode) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_info(pset) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_info(type) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_info(numcpus) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_info(cpulist) contains uninitialised byte(s)
+ ...
+
+Syscall param pset(type) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param pset(numcpus) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207: SYS_pset (INFO) 5s 1m
+---------------------------------------------------------
+Syscall param pset_info(subcode) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_info(pset) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_info(type) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_info(numcpus) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_info(cpulist) contains uninitialised byte(s)
+ ...
+
+Syscall param pset(cpulist) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207: SYS_pset (BIND) 5s 1m
+---------------------------------------------------------
+Syscall param pset_bind(subcode) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_bind(pset) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_bind(idtype) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_bind(id) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_bind(opset) contains uninitialised byte(s)
+ ...
+
+Syscall param pset(opset) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207: SYS_pset (BIND_LWP) 5s 1m
+---------------------------------------------------------
+Syscall param pset_bind_lwp(subcode) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_bind_lwp(pset) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_bind_lwp(id) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_bind_lwp(pid) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_bind_lwp(opset) contains uninitialised byte(s)
+ ...
+
+Syscall param pset(opset) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207: SYS_pset (GETLOADAVG) 4s 1m
+---------------------------------------------------------
+Syscall param pset_getloadavg(subcode) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_getloadavg(pset) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_getloadavg(loadavg[]) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_getloadavg(nelem) contains uninitialised byte(s)
+ ...
+
+Syscall param pset(loadavg) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207: SYS_pset (LIST) 3s 1m
+---------------------------------------------------------
+Syscall param pset_list(subcode) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_list(psetlist) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_list(numpsets) contains uninitialised byte(s)
+ ...
+
+Syscall param pset(numpsets) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207: SYS_pset (LIST) 3s 1m
+---------------------------------------------------------
+Syscall param pset_list(subcode) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_list(psetlist) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_list(numpsets) contains uninitialised byte(s)
+ ...
+
+Syscall param pset(psetlist) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207: SYS_pset (SETATTR) 3s 0m
+---------------------------------------------------------
+Syscall param pset_setattr(subcode) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_setattr(pset) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_setattr(attr) contains uninitialised byte(s)
+ ...
+
+---------------------------------------------------------
+207: SYS_pset (GETATTR) 3s 1m
+---------------------------------------------------------
+Syscall param pset_getattr(subcode) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_getattr(pset) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_getattr(attr) contains uninitialised byte(s)
+ ...
+
+Syscall param pset(attr) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+207: SYS_pset (ASSIGN_FORCED) 4s 1m
+---------------------------------------------------------
+Syscall param pset_assign_forced(subcode) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_assign_forced(pset) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_assign_forced(cpu) contains uninitialised byte(s)
+ ...
+
+Syscall param pset_assign_forced(opset) contains uninitialised byte(s)
+ ...
+
+Syscall param pset(opset) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
209: SYS_resolvepath 3s 2m
---------------------------------------------------------
Syscall param resolvepath(path) contains uninitialised byte(s)