1/* Basic ioctl scalar tests. */
2
3#define __EXTENSIONS__ 1
4
5#include "scalar.h"
6
7#include <net/if.h>
8#include <sys/crypto/ioctl.h>
9#include <sys/dditypes.h>
10#include <sys/devinfo_impl.h>
11#include <sys/dtrace.h>
12#include <sys/filio.h>
13#include <sys/stat.h>		/* for _ST_FSTYPSZ */
14#include <sys/mntio.h>
15#include <sys/mnttab.h>
16#include <sys/pool_impl.h>
17#include <sys/sockio.h>
18#include <sys/stropts.h>
19#include <sys/termios.h>
20
21/* pools */
22__attribute__((noinline))
23static void sys_ioctl_POOL_STATUSQ(void)
24{
25   GO(SYS_ioctl, "(POOL_STATUSQ) 3s 1m");
26   SY(SYS_ioctl, x0 - 1, x0 + POOL_STATUSQ, x0); FAIL;
27}
28
29/* mntio */
30__attribute__((noinline))
31static void sys_ioctl_MNTIOC_GETEXTMNTENT(void)
32{
33   GO(SYS_ioctl, "(MNTIOC_GETEXTMNTENT) 3s 1m");
34   SY(SYS_ioctl, x0 - 1, x0 + MNTIOC_GETEXTMNTENT, x0 + 1); FAIL;
35}
36
37__attribute__((noinline))
38static void sys_ioctl_MNTIOC_GETEXTMNTENT_2(void)
39{
40   struct mntentbuf embuf;
41
42   embuf.mbuf_emp = (void *) (x0 + 1);
43   embuf.mbuf_buf = (void *) (x0 + 1);
44   embuf.mbuf_bufsize = x0 + 1;
45
46   GO(SYS_ioctl, "(MNTIOC_GETEXTMNTENT) 4s 2m");
47   SY(SYS_ioctl, x0 - 1, x0 + MNTIOC_GETEXTMNTENT, &embuf + x0); FAIL;
48}
49
50__attribute__((noinline))
51static void sys_ioctl_MNTIOC_GETEXTMNTENT_3(void)
52{
53   struct extmnttab mnt;
54   struct mntentbuf embuf;
55
56   mnt.mnt_special = (void *) (x0 + 1);
57   mnt.mnt_mountp = (void *) (x0 + 1);
58   mnt.mnt_fstype = (void *) (x0 + 1);
59   mnt.mnt_mntopts = (void *) (x0 + 1);
60   mnt.mnt_time = (void *) (x0 + 1);
61
62   embuf.mbuf_emp = x0 + &mnt;
63   embuf.mbuf_buf = (void *) (x0 + 1);
64   embuf.mbuf_bufsize = x0 + 1;
65
66   GO(SYS_ioctl, "(MNTIOC_GETEXTMNTENT) 5s 6m");
67   SY(SYS_ioctl, x0 - 1, x0 + MNTIOC_GETEXTMNTENT, &embuf + x0); FAIL;
68}
69
70__attribute__((noinline))
71static void sys_ioctl_MNTIOC_GETMNTANY(void)
72{
73   GO(SYS_ioctl, "(MNTIOC_GETMNTANY) 3s 1m");
74   SY(SYS_ioctl, x0 - 1, x0 + MNTIOC_GETMNTANY, x0 + 1); FAIL;
75}
76
77__attribute__((noinline))
78static void sys_ioctl_MNTIOC_GETMNTANY_2(void)
79{
80   struct mntentbuf embuf;
81
82   embuf.mbuf_emp = (void *) (x0 + 1);
83   embuf.mbuf_buf = (void *) (x0 + 1);
84   embuf.mbuf_bufsize = x0 + 1;
85
86   GO(SYS_ioctl, "(MNTIOC_GETMNTANY) 4s 2m");
87   SY(SYS_ioctl, x0 - 1, x0 + MNTIOC_GETMNTANY, &embuf + x0); FAIL;
88}
89
90__attribute__((noinline))
91static void sys_ioctl_MNTIOC_GETMNTANY_3(void)
92{
93   struct mnttab mnt;
94   struct mntentbuf embuf;
95
96   mnt.mnt_special = (void *) (x0 + 1);
97   mnt.mnt_mountp = (void *) (x0 + 1);
98   mnt.mnt_fstype = (void *) (x0 + 1);
99   mnt.mnt_mntopts = (void *) (x0 + 1);
100   mnt.mnt_time = (void *) (x0 + 1);
101
102   embuf.mbuf_emp = x0 + (struct extmnttab *) &mnt;
103   embuf.mbuf_buf = (void *) (x0 + 1);
104   embuf.mbuf_bufsize = x0 + 1;
105
106   GO(SYS_ioctl, "(MNTIOC_GETMNTANY) 5s 6m");
107   SY(SYS_ioctl, x0 - 1, x0 + MNTIOC_GETMNTANY, &embuf + x0); FAIL;
108}
109
110/* termio/termios */
111__attribute__((noinline))
112static void sys_ioctl_TCGETA(void)
113{
114   GO(SYS_ioctl, "(TCGETA) 3s 1m");
115   SY(SYS_ioctl, x0 - 1, x0 + TCGETA, x0); FAIL;
116}
117
118__attribute__((noinline))
119static void sys_ioctl_TCGETS(void)
120{
121   GO(SYS_ioctl, "(TCGETS) 3s 1m");
122   SY(SYS_ioctl, x0 - 1, x0 + TCGETS, x0); FAIL;
123}
124
125__attribute__((noinline))
126static void sys_ioctl_TCSETS(void)
127{
128   GO(SYS_ioctl, "(TCSETS) 3s 1m");
129   SY(SYS_ioctl, x0 - 1, x0 + TCSETS, x0); FAIL;
130}
131
132__attribute__((noinline))
133static void sys_ioctl_TCSETSW(void)
134{
135   GO(SYS_ioctl, "(TCSETSW) 3s 1m");
136   SY(SYS_ioctl, x0 - 1, x0 + TCSETSW, x0); FAIL;
137}
138
139__attribute__((noinline))
140static void sys_ioctl_TCSETSF(void)
141{
142   GO(SYS_ioctl, "(TCSETSF) 3s 1m");
143   SY(SYS_ioctl, x0 - 1, x0 + TCSETSF, x0); FAIL;
144}
145
146__attribute__((noinline))
147static void sys_ioctl_TIOCGWINSZ(void)
148{
149   GO(SYS_ioctl, "(TIOCGWINSZ) 3s 1m");
150   SY(SYS_ioctl, x0 - 1, x0 + TIOCGWINSZ, x0); FAIL;
151}
152
153__attribute__((noinline))
154static void sys_ioctl_TIOCSWINSZ(void)
155{
156   GO(SYS_ioctl, "(TIOCSWINSZ) 3s 1m");
157   SY(SYS_ioctl, x0 - 1, x0 + TIOCSWINSZ, x0); FAIL;
158}
159
160__attribute__((noinline))
161static void sys_ioctl_TIOCGPGRP(void)
162{
163   GO(SYS_ioctl, "(TIOCGPGRP) 3s 1m");
164   SY(SYS_ioctl, x0 - 1, x0 + TIOCGPGRP, x0); FAIL;
165}
166
167__attribute__((noinline))
168static void sys_ioctl_TIOCSPGRP(void)
169{
170   GO(SYS_ioctl, "(TIOCSPGRP) 3s 1m");
171   SY(SYS_ioctl, x0 - 1, x0 + TIOCSPGRP, x0); FAIL;
172}
173
174__attribute__((noinline))
175static void sys_ioctl_TIOCGSID(void)
176{
177   GO(SYS_ioctl, "(TIOCGSID) 3s 1m");
178   SY(SYS_ioctl, x0 - 1, x0 + TIOCGSID, x0); FAIL;
179}
180
181__attribute__((noinline))
182static void sys_ioctl_TIOCNOTTY(void)
183{
184   GO(SYS_ioctl, "(TIOCNOTTY) 2s 0m");
185   SY(SYS_ioctl, x0 - 1, x0 + TIOCNOTTY); FAIL;
186}
187
188__attribute__((noinline))
189static void sys_ioctl_TIOCSCTTY(void)
190{
191   GO(SYS_ioctl, "(TIOCSCTTY) 2s 0m");
192   SY(SYS_ioctl, x0 - 1, x0 + TIOCSCTTY); FAIL;
193}
194
195/* STREAMS */
196__attribute__((noinline))
197static void sys_ioctl_I_PUSH(void)
198{
199   GO(SYS_ioctl, "(I_PUSH) 3s 1m");
200   SY(SYS_ioctl, x0 - 1, x0 + I_PUSH, x0 + 1); FAIL;
201}
202
203__attribute__((noinline))
204static void sys_ioctl_I_FLUSH(void)
205{
206   GO(SYS_ioctl, "(I_FLUSH) 3s 0m");
207   SY(SYS_ioctl, x0 - 1, x0 + I_FLUSH, x0 + FLUSHR); FAIL;
208}
209
210__attribute__((noinline))
211static void sys_ioctl_I_STR(void)
212{
213   GO(SYS_ioctl, "(I_STR) 3s 1m");
214   SY(SYS_ioctl, x0 - 1, x0 + I_STR, x0 + 1); FAIL;
215}
216
217__attribute__((noinline))
218static void sys_ioctl_I_STR_2(void)
219{
220   struct strioctl str;
221
222   str.ic_cmd = x0;
223   str.ic_timout = x0;
224   str.ic_len = x0 + 1;
225   str.ic_dp = (void *) (x0 + 1);
226
227   GO(SYS_ioctl, "(I_STR) 4s 1m");
228   SY(SYS_ioctl, x0 - 1, x0 + I_STR, &str + x0); FAIL;
229}
230
231__attribute__((noinline))
232static void sys_ioctl_I_FIND(void)
233{
234   GO(SYS_ioctl, "(I_FIND) 3s 1m");
235   SY(SYS_ioctl, x0 - 1, x0 + I_FIND, x0 + 1); FAIL;
236}
237
238__attribute__((noinline))
239static void sys_ioctl_I_PEEK(void)
240{
241   GO(SYS_ioctl, "(I_PEEK) 3s 7m");
242   SY(SYS_ioctl, x0 - 1, x0 + I_PEEK, x0 + 1); FAIL;
243}
244
245__attribute__((noinline))
246static void sys_ioctl_I_PEEK_2(void)
247{
248   struct strpeek peek;
249
250   peek.ctlbuf.maxlen = x0 + 1;
251   peek.ctlbuf.len = x0;
252   peek.ctlbuf.buf = (void*)(x0 + 1);
253   peek.databuf.maxlen = x0 + 1;
254   peek.databuf.len = x0;
255   peek.databuf.buf = (void*)(x0 + 1);
256   peek.flags = x0;
257
258   GO(SYS_ioctl, "(I_PEEK) 3s 7m");
259   SY(SYS_ioctl, x0 - 1, x0 + I_PEEK, &peek + x0); FAIL;
260}
261
262__attribute__((noinline))
263static void sys_ioctl_I_CANPUT(void)
264{
265   GO(SYS_ioctl, "(I_CANPUT) 3s 0m");
266   SY(SYS_ioctl, x0 - 1, x0 + I_CANPUT, x0); FAIL;
267}
268
269/* sockio */
270__attribute__((noinline))
271static void sys_ioctl_SIOCGIFCONF(void)
272{
273   GO(SYS_ioctl, "(SIOCGIFCONF), 3s 2m");
274   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFCONF, x0 - 1); FAIL;
275}
276
277__attribute__((noinline))
278static void sys_ioctl_SIOCGIFCONF_2(void)
279{
280   struct ifconf ifc;
281   char buf[] = "";
282
283   ifc.ifc_len = x0 + 1;
284   ifc.ifc_buf = (void *) (x0 + buf);
285
286   GO(SYS_ioctl, "(SIOCGIFCONF), 5s 0m");
287   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFCONF, &ifc + x0); FAIL;
288}
289
290__attribute__((noinline))
291static void sys_ioctl_SIOCGIFFLAGS(void)
292{
293   GO(SYS_ioctl, "(SIOCGIFFLAGS) 3s 2m");
294   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFFLAGS, x0 - 1); FAIL;
295}
296
297__attribute__((noinline))
298static void sys_ioctl_SIOCGIFFLAGS_2(void)
299{
300   struct ifreq ifr;
301
302   ifr.ifr_name[0] = x0 + 'l';
303   ifr.ifr_name[1] = x0 + 'o';
304   ifr.ifr_name[2] = x0 + '0';
305   ifr.ifr_name[3] = x0 + '\0';
306
307   GO(SYS_ioctl, "(SIOCGIFFLAGS), 4s 0m");
308   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFFLAGS, &ifr + x0); FAIL;
309}
310
311__attribute__((noinline))
312static void sys_ioctl_SIOCGIFNETMASK(void)
313{
314   GO(SYS_ioctl, "(SIOCGIFNETMASK) 3s 2m");
315   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFNETMASK, x0 - 1); FAIL;
316}
317
318__attribute__((noinline))
319static void sys_ioctl_SIOCGIFNETMASK_2(void)
320{
321   struct ifreq ifr;
322
323   ifr.ifr_name[0] = x0 + 'l';
324   ifr.ifr_name[1] = x0 + 'o';
325   ifr.ifr_name[2] = x0 + '0';
326   ifr.ifr_name[3] = x0 + '\0';
327
328   GO(SYS_ioctl, "(SIOCGIFNETMASK), 4s 0m");
329   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFNETMASK, &ifr + x0); FAIL;
330}
331
332__attribute__((noinline))
333static void sys_ioctl_SIOCGIFNUM(void)
334{
335   int ifnum;
336
337   GO(SYS_ioctl, "(SIOCGIFNUM) 3s 0m");
338   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFNUM, &ifnum + x0); FAIL;
339}
340
341__attribute__((noinline))
342static void sys_ioctl_SIOCGIFNUM_2(void)
343{
344   GO(SYS_ioctl, "(SIOCGIFNUM) 3s 1m");
345   SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFNUM, x0 - 1); FAIL;
346}
347
348__attribute__((noinline))
349static void sys_ioctl_SIOCGLIFBRDADDR(void)
350{
351   GO(SYS_ioctl, "(SIOCGLIFBRDADDR) 3s 2m");
352   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFBRDADDR, x0 - 1); FAIL;
353}
354
355__attribute__((noinline))
356static void sys_ioctl_SIOCGLIFBRDADDR_2(void)
357{
358   struct lifreq lifr;
359
360   lifr.lifr_name[0] = x0 + 'l';
361   lifr.lifr_name[1] = x0 + 'o';
362   lifr.lifr_name[2] = x0 + '0';
363   lifr.lifr_name[3] = x0 + '\0';
364
365   GO(SYS_ioctl, "(SIOCGLIFBRDADDR), 4s 0m");
366   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFBRDADDR, &lifr + x0); FAIL;
367}
368
369__attribute__((noinline))
370static void sys_ioctl_SIOCGLIFCONF(void)
371{
372   GO(SYS_ioctl, "(SIOCGLIFCONF), 3s 4m");
373   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFCONF, x0 - 1); FAIL;
374}
375
376__attribute__((noinline))
377static void sys_ioctl_SIOCGLIFCONF_2(void)
378{
379   struct lifconf lifc;
380   char buf[] = "";
381
382   lifc.lifc_len = x0 + 1;
383   lifc.lifc_buf = (void *) (x0 + buf);
384   lifc.lifc_family = x0 + 1;
385   lifc.lifc_flags = x0 + 0;
386
387   GO(SYS_ioctl, "(SIOCGLIFCONF), 7s 0m");
388   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFCONF, &lifc + x0); FAIL;
389}
390
391__attribute__((noinline))
392static void sys_ioctl_SIOCGLIFFLAGS(void)
393{
394   GO(SYS_ioctl, "(SIOCGLIFFLAGS) 3s 2m");
395   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFFLAGS, x0 - 1); FAIL;
396}
397
398__attribute__((noinline))
399static void sys_ioctl_SIOCGLIFFLAGS_2(void)
400{
401   struct lifreq lifr;
402
403   lifr.lifr_name[0] = x0 + 'l';
404   lifr.lifr_name[1] = x0 + 'o';
405   lifr.lifr_name[2] = x0 + '0';
406   lifr.lifr_name[3] = x0 + '\0';
407
408   GO(SYS_ioctl, "(SIOCGLIFFLAGS), 4s 0m");
409   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFFLAGS, &lifr + x0); FAIL;
410}
411
412__attribute__((noinline))
413static void sys_ioctl_SIOCGLIFNETMASK(void)
414{
415   GO(SYS_ioctl, "(SIOCGLIFNETMASK) 3s 2m");
416   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFNETMASK, x0 - 1); FAIL;
417}
418
419__attribute__((noinline))
420static void sys_ioctl_SIOCGLIFNETMASK_2(void)
421{
422   struct lifreq lifr;
423
424   lifr.lifr_name[0] = x0 + 'l';
425   lifr.lifr_name[1] = x0 + 'o';
426   lifr.lifr_name[2] = x0 + '0';
427   lifr.lifr_name[3] = x0 + '\0';
428
429   GO(SYS_ioctl, "(SIOCGLIFNETMASK), 4s 0m");
430   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFNETMASK, &lifr + x0); FAIL;
431}
432
433__attribute__((noinline))
434static void sys_ioctl_SIOCGLIFNUM(void)
435{
436   struct lifnum lifn;
437
438   lifn.lifn_family = x0;
439   lifn.lifn_flags = x0;
440
441   GO(SYS_ioctl, "(SIOCGLIFNUM) 4s 0m");
442   SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFNUM, &lifn + x0); FAIL;
443}
444
445/* filio */
446__attribute__((noinline))
447static void sys_ioctl_FIOSETOWN(void)
448{
449   pid_t pid;
450
451   GO(SYS_ioctl, "(FIOSETOWN) 4s 0m");
452   SY(SYS_ioctl, x0 - 1, x0 + FIOSETOWN, &pid + x0); FAIL;
453}
454
455__attribute__((noinline))
456static void sys_ioctl_FIOGETOWN(void)
457{
458   GO(SYS_ioctl, "(FIOGETOWN) 3s 1m");
459   SY(SYS_ioctl, x0 - 1, x0 + FIOGETOWN, x0 + 1); FAIL;
460}
461
462/* crypto */
463__attribute__((noinline))
464static void sys_ioctl_CRYPTO_GET_PROVIDER_LIST(void)
465{
466   GO(SYS_ioctl, "(CRYPTO_GET_PROVIDER_LIST) 3s 1m");
467   SY(SYS_ioctl, x0 - 1, x0 + CRYPTO_GET_PROVIDER_LIST, x0 + 1); FAIL;
468}
469
470__attribute__((noinline))
471static void sys_ioctl_CRYPTO_GET_PROVIDER_LIST_2(void)
472{
473   crypto_get_provider_list_t pl;
474
475   pl.pl_count = x0 + 1;
476
477   GO(SYS_ioctl, "(CRYPTO_GET_PROVIDER_LIST) 4s 0m");
478   SY(SYS_ioctl, x0 - 1, x0 + CRYPTO_GET_PROVIDER_LIST, &pl + x0); FAIL;
479}
480
481/* dtrace */
482__attribute__((noinline))
483static void sys_ioctl_DTRACEHIOC_REMOVE(void)
484{
485   GO(SYS_ioctl, "(DTRACEHIOC_REMOVE) 3s 0m");
486   SY(SYS_ioctl, x0 - 1, x0 + DTRACEHIOC_REMOVE, x0); FAIL;
487}
488
489__attribute__((noinline))
490static void sys_ioctl_DTRACEHIOC_ADDDOF(void)
491{
492   dof_helper_t dh;
493
494   dh.dofhp_mod[0] = x0 + 'D';
495   dh.dofhp_mod[1] = x0 + '\0';
496   dh.dofhp_addr = x0;
497   dh.dofhp_dof = x0;
498
499   GO(SYS_ioctl, "(DTRACEHIOC_ADDDOF) 6s 0m");
500   SY(SYS_ioctl, x0 - 1, x0 + DTRACEHIOC_ADDDOF, x0 + &dh); FAIL;
501}
502
503__attribute__((noinline))
504static void sys_ioctl_DINFOUSRLD(void)
505{
506   GO(SYS_ioctl, "(DINFOUSRLD) 3s 0m");
507   SY(SYS_ioctl, x0 - 1, x0 + DINFOUSRLD, x0 + 1); FAIL;
508}
509
510__attribute__((noinline))
511static void sys_ioctl_DINFOIDENT(void)
512{
513   GO(SYS_ioctl, "(DINFOIDENT) 2s 0m");
514   SY(SYS_ioctl, x0 - 1, x0 + DINFOIDENT); FAIL;
515}
516
517int main(void)
518{
519   /* Uninitialised, but we know px[0] is 0x0. */
520   long *px = malloc(sizeof(long));
521   x0 = px[0];
522
523   /* pools */
524   sys_ioctl_POOL_STATUSQ();
525
526   /* mntio */
527   sys_ioctl_MNTIOC_GETEXTMNTENT();
528   sys_ioctl_MNTIOC_GETEXTMNTENT_2();
529   sys_ioctl_MNTIOC_GETEXTMNTENT_3();
530   sys_ioctl_MNTIOC_GETMNTANY();
531   sys_ioctl_MNTIOC_GETMNTANY_2();
532   sys_ioctl_MNTIOC_GETMNTANY_3();
533
534   /* termio/termios */
535   sys_ioctl_TCGETA();
536   sys_ioctl_TCGETS();
537   sys_ioctl_TCSETS();
538   sys_ioctl_TCSETSW();
539   sys_ioctl_TCSETSF();
540   sys_ioctl_TIOCGWINSZ();
541   sys_ioctl_TIOCSWINSZ();
542   sys_ioctl_TIOCGPGRP();
543   sys_ioctl_TIOCSPGRP();
544   sys_ioctl_TIOCGSID();
545   sys_ioctl_TIOCNOTTY();
546   sys_ioctl_TIOCSCTTY();
547
548   /* STREAMS */
549   sys_ioctl_I_PUSH();
550   sys_ioctl_I_FLUSH();
551   sys_ioctl_I_STR();
552   sys_ioctl_I_STR_2();
553   sys_ioctl_I_FIND();
554   sys_ioctl_I_PEEK();
555   sys_ioctl_I_PEEK_2();
556   sys_ioctl_I_CANPUT();
557
558   /* sockio */
559   sys_ioctl_SIOCGIFCONF();
560   sys_ioctl_SIOCGIFCONF_2();
561   sys_ioctl_SIOCGIFFLAGS();
562   sys_ioctl_SIOCGIFFLAGS_2();
563   sys_ioctl_SIOCGIFNETMASK();
564   sys_ioctl_SIOCGIFNETMASK_2();
565   sys_ioctl_SIOCGIFNUM();
566   sys_ioctl_SIOCGIFNUM_2();
567   sys_ioctl_SIOCGLIFBRDADDR();
568   sys_ioctl_SIOCGLIFBRDADDR_2();
569   sys_ioctl_SIOCGLIFCONF();
570   sys_ioctl_SIOCGLIFCONF_2();
571   sys_ioctl_SIOCGLIFFLAGS();
572   sys_ioctl_SIOCGLIFFLAGS_2();
573   sys_ioctl_SIOCGLIFNETMASK();
574   sys_ioctl_SIOCGLIFNETMASK_2();
575   sys_ioctl_SIOCGLIFNUM();
576
577   /* filio */
578   sys_ioctl_FIOSETOWN();
579   sys_ioctl_FIOGETOWN();
580
581   /* crypto */
582   sys_ioctl_CRYPTO_GET_PROVIDER_LIST();
583   sys_ioctl_CRYPTO_GET_PROVIDER_LIST_2();
584
585   /* dtrace */
586   sys_ioctl_DTRACEHIOC_REMOVE();
587   sys_ioctl_DTRACEHIOC_ADDDOF();
588
589   /* devinfo */
590   sys_ioctl_DINFOUSRLD();
591   sys_ioctl_DINFOIDENT();
592
593   return 0;
594}
595
596