1 /* Scalar test for new modctl syscall commands available on newer Solaris. */
2
3 #include "scalar.h"
4 #include "../../../config.h"
5
6 #include <sys/modctl.h>
7 #if defined(HAVE_SYS_SYSNVL_H)
8 #include <sys/sysnvl.h>
9 #endif /* HAVE_SYS_SYSNVL_H */
10
11 __attribute__((noinline))
sys_modctl(void)12 static void sys_modctl(void)
13 {
14 GO(SYS_modctl, "(MODNVL_DEVLINKSYNC, GET) 5s 1m");
15 SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC,
16 # if defined(HAVE_SYS_SYSNVL_H)
17 x0 + SYSNVL_OP_GET,
18 # else
19 x0 + MODCTL_NVL_OP_GET,
20 # endif /* HAVE_SYS_SYSNVL_H */
21 x0, x0 + 1, x0); FAIL;
22 }
23
24 __attribute__((noinline))
sys_modctl2(void)25 static void sys_modctl2(void)
26 {
27 uint64_t buflen = x0 + 10;
28
29 GO(SYS_modctl, "(MODNVL_DEVLINKSYNC, GET) 4s 2m");
30 SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC,
31 # if defined(HAVE_SYS_SYSNVL_H)
32 x0 + SYSNVL_OP_GET,
33 # else
34 x0 + MODCTL_NVL_OP_GET,
35 # endif /* HAVE_SYS_SYSNVL_H */
36 x0 + 1, &buflen, x0 + 1); FAIL;
37 }
38
39 __attribute__((noinline))
sys_modctl3(void)40 static void sys_modctl3(void)
41 {
42 GO(SYS_modctl, "(MODNVL_DEVLINKSYNC, UPDATE) 4s 1m");
43 SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC,
44 # if defined(HAVE_SYS_SYSNVL_H)
45 x0 + SYSNVL_OP_UPDATE,
46 # else
47 x0 + MODCTL_NVL_OP_UPDATE,
48 # endif /* HAVE_SYS_SYSNVL_H */
49 x0, x0 + 1); FAIL;
50 }
51
52 __attribute__((noinline))
sys_modctl4(void)53 static void sys_modctl4(void)
54 {
55 uint64_t buflen = x0 + 10;
56
57 GO(SYS_modctl, "(MODNVL_DEVLINKSYNC, UPDATE) 4s 1m");
58 SY(SYS_modctl, x0 + MODNVL_DEVLINKSYNC,
59 # if defined(HAVE_SYS_SYSNVL_H)
60 x0 + SYSNVL_OP_UPDATE,
61 # else
62 x0 + MODCTL_NVL_OP_UPDATE,
63 # endif /* HAVE_SYS_SYSNVL_H */
64 x0 + 1, &buflen); FAIL;
65 }
66
67 __attribute__((noinline))
sys_modctl5(void)68 static void sys_modctl5(void)
69 {
70 GO(SYS_modctl, "(MODDEVINFO_CACHE_TS) 2s 1m");
71 SY(SYS_modctl, x0 + MODDEVINFO_CACHE_TS, x0 + 1); FAIL;
72 }
73
main(void)74 int main(void)
75 {
76 /* Uninitialised, but we know px[0] is 0x0. */
77 long *px = malloc(sizeof(long));
78 x0 = px[0];
79
80 /* SYS_modctl 152 */
81 sys_modctl();
82 sys_modctl2();
83 sys_modctl3();
84 sys_modctl4();
85 sys_modctl5();
86
87 return 0;
88 }
89
90