break;
}
-#if defined(SOLARIS_MODCTL_MODNVL)
+# if defined(SOLARIS_MODCTL_MODNVL)
case VKI_MODNVL_DEVLINKSYNC:
/* int modnvl_devlinksync(sysnvl_op_t a1, uintptr_t a2, uintptr_t a3,
uintptr_t a4); */
switch (ARG2 /*op*/) {
+
+# if defined(HAVE_SYS_SYSNVL_H)
case VKI_SYSNVL_OP_GET:
- PRINT("sys_modctl ( %ld, %lu, %#lx, %#lx, %#lx )",
- SARG1, ARG2, ARG3, ARG4, ARG5);
PRE_REG_READ5(long, SC3("modctl", "modnvl_devlinksync", "get"),
int, cmd, sysnvl_op_t, a1, char *, bufp,
uint64_t *, buflenp, uint64_t *, genp);
+# else
+ case VKI_MODCTL_NVL_OP_GET:
+ PRE_REG_READ5(long, SC3("modctl", "modnvl_devlinksync", "get"),
+ int, cmd, modctl_nvl_op_t, a1, char *, bufp,
+ uint64_t *, buflenp, uint64_t *, genp);
+# endif /* HAVE_SYS_SYSNVL_H */
+ PRINT("sys_modctl ( %ld, %lu, %#lx, %#lx, %#lx )",
+ SARG1, ARG2, ARG3, ARG4, ARG5);
PRE_MEM_WRITE("modctl(buflenp)", ARG4, sizeof(vki_uint64_t));
if (ML_(safe_to_deref)((vki_uint64_t *) ARG4, sizeof(vki_uint64_t))) {
if (ARG3 != 0) {
PRE_MEM_WRITE("modctl(genp)", ARG5, sizeof(vki_uint64_t));
}
break;
+
+# if defined(HAVE_SYS_SYSNVL_H)
case VKI_SYSNVL_OP_UPDATE:
- PRINT("sys_modctl ( %ld, %lu, %#lx, %#lx )", SARG1, ARG2, ARG3, ARG4);
PRE_REG_READ4(long, SC3("modctl", "modnvl_devlinksync", "update"),
int, cmd, sysnvl_op_t, a1, char *, bufp,
uint64_t *, buflenp);
+# else
+ case VKI_MODCTL_NVL_OP_UPDATE:
+ PRE_REG_READ4(long, SC3("modctl", "modnvl_devlinksync", "update"),
+ int, cmd, modctl_nvl_op_t, a1, char *, bufp,
+ uint64_t *, buflenp);
+# endif /* HAVE_SYS_SYSNVL_H */
+ PRINT("sys_modctl ( %ld, %lu, %#lx, %#lx )", SARG1, ARG2, ARG3, ARG4);
PRE_MEM_READ("modctl(buflenp)", ARG4, sizeof(vki_uint64_t));
if (ML_(safe_to_deref)((vki_uint64_t *) ARG4, sizeof(vki_uint64_t))) {
PRE_MEM_READ("modctl(bufp)", ARG3, *(vki_uint64_t *) ARG4);
}
break;
+
default:
VG_(unimplemented)("Syswrap of the modctl call with command "
"MODNVL_DEVLINKSYNC and op %ld.", ARG2);
int, cmd, uint64_t *, utsp);
PRE_MEM_WRITE("modctl(utsp)", ARG2, sizeof(vki_uint64_t));
break;
-#endif /* SOLARIS_MODCTL_MODNVL */
+# endif /* SOLARIS_MODCTL_MODNVL */
default:
VG_(unimplemented)("Syswrap of the modctl call with command %ld.", SARG1);
case VKI_MODINFO:
POST_MEM_WRITE(ARG3, sizeof(struct vki_modinfo));
break;
-#if defined(SOLARIS_MODCTL_MODNVL)
+# if defined(SOLARIS_MODCTL_MODNVL)
case VKI_MODNVL_DEVLINKSYNC:
switch (ARG2 /*op*/) {
+
+# if defined(HAVE_SYS_SYSNVL_H)
case VKI_SYSNVL_OP_GET:
+# else
+ case VKI_MODCTL_NVL_OP_GET:
+# endif /* HAVE_SYS_SYSNVL_H */
+
POST_MEM_WRITE(ARG4, sizeof(vki_uint64_t));
if (ARG3 != 0) {
POST_MEM_WRITE(ARG3, *(vki_uint64_t *) ARG4);
POST_MEM_WRITE(ARG5, sizeof(vki_uint64_t));
}
break;
+
+# if defined(HAVE_SYS_SYSNVL_H)
case VKI_SYSNVL_OP_UPDATE:
+# else
+ case VKI_MODCTL_NVL_OP_UPDATE:
+# endif /* HAVE_SYS_SYSNVL_H */
break;
+
default:
vg_assert(0);
break;
case VKI_MODDEVINFO_CACHE_TS:
POST_MEM_WRITE(ARG2, sizeof(vki_uint64_t));
break;
-#endif /* SOLARIS_MODCTL_MODNVL */
+# endif /* SOLARIS_MODCTL_MODNVL */
+
default:
vg_assert(0);
break;
#define VKI_MODLOAD MODLOAD
#define VKI_MODUNLOAD MODUNLOAD
#define VKI_MODINFO MODINFO
+
#if defined(SOLARIS_MODCTL_MODNVL)
#define VKI_MODNVL_DEVLINKSYNC MODNVL_DEVLINKSYNC
#define VKI_MODDEVINFO_CACHE_TS MODDEVINFO_CACHE_TS
+#if !defined(HAVE_SYS_SYSNVL_H)
+#define VKI_MODCTL_NVL_OP_GET MODCTL_NVL_OP_GET
+#define VKI_MODCTL_NVL_OP_UPDATE MODCTL_NVL_OP_UPDATE
+#endif /* !HAVE_SYS_SYSNVL_H */
#endif /* SOLARIS_MODCTL_MODNVL */
+
#define vki_modid_t int
#define vki_modinfo modinfo
#define VKI_MS_OPTIONSTR MS_OPTIONSTR
-#if defined(HAVE_SYS_SYSNVL_H)
-#include <sys/sysnvl.h>
-#define VKI_SYSNVL_OP_GET SYSNVL_OP_GET
-#define VKI_SYSNVL_OP_UPDATE SYSNVL_OP_UPDATE
-#endif /* HAVE_SYS_SYSNVL_H */
-
-
#include <sys/poll.h>
#define vki_pollfd pollfd
#define vki_pollfd_t pollfd_t
#define VKI_SI86FPSTART SI86FPSTART
+#if defined(HAVE_SYS_SYSNVL_H)
+#include <sys/sysnvl.h>
+#define VKI_SYSNVL_OP_GET SYSNVL_OP_GET
+#define VKI_SYSNVL_OP_UPDATE SYSNVL_OP_UPDATE
+#endif /* HAVE_SYS_SYSNVL_H */
+
+
#include <sys/systeminfo.h>
#define VKI_SI_SYSNAME SI_SYSNAME
#define VKI_SI_HOSTNAME SI_HOSTNAME
/* Scalar test for new modctl syscall commands available on newer Solaris. */
#include "scalar.h"
+#include "../../../config.h"
#include <sys/modctl.h>
+#if defined(HAVE_SYS_SYSNVL_H)
#include <sys/sysnvl.h>
+#endif /* HAVE_SYS_SYSNVL_H */
__attribute__((noinline))
static void sys_modctl(void)
{
GO(SYS_modctl, "(MODNVL_DEVLINKSYNC, GET) 5s 1m");
- SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC, x0 + SYSNVL_OP_GET,
+ SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC,
+# if defined(HAVE_SYS_SYSNVL_H)
+ x0 + SYSNVL_OP_GET,
+# else
+ x0 + MODCTL_NVL_OP_GET,
+# endif /* HAVE_SYS_SYSNVL_H */
x0, x0 + 1, x0); FAIL;
}
uint64_t buflen = x0 + 10;
GO(SYS_modctl, "(MODNVL_DEVLINKSYNC, GET) 4s 2m");
- SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC, x0 + SYSNVL_OP_GET,
+ SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC,
+# if defined(HAVE_SYS_SYSNVL_H)
+ x0 + SYSNVL_OP_GET,
+# else
+ x0 + MODCTL_NVL_OP_GET,
+# endif /* HAVE_SYS_SYSNVL_H */
x0 + 1, &buflen, x0 + 1); FAIL;
}
static void sys_modctl3(void)
{
GO(SYS_modctl, "(MODNVL_DEVLINKSYNC, UPDATE) 4s 1m");
- SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC, x0 + SYSNVL_OP_UPDATE,
+ SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC,
+# if defined(HAVE_SYS_SYSNVL_H)
+ x0 + SYSNVL_OP_UPDATE,
+# else
+ x0 + MODCTL_NVL_OP_UPDATE,
+# endif /* HAVE_SYS_SYSNVL_H */
x0, x0 + 1); FAIL;
}
uint64_t buflen = x0 + 10;
GO(SYS_modctl, "(MODNVL_DEVLINKSYNC, UPDATE) 4s 1m");
- SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC, x0 + SYSNVL_OP_UPDATE,
+ SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC,
+# if defined(HAVE_SYS_SYSNVL_H)
+ x0 + SYSNVL_OP_UPDATE,
+# else
+ x0 + MODCTL_NVL_OP_UPDATE,
+# endif /* HAVE_SYS_SYSNVL_H */
x0 + 1, &buflen); FAIL;
}