+
+static uint64_t
+systrace_getarg(void *arg, dtrace_id_t id, void *parg, int argno, int aframes)
+{
+#pragma unused(arg,id,parg,aframes) /* __APPLE__ */
+ uint64_t val = 0;
+ syscall_arg_t *stack = (syscall_arg_t *)NULL;
+
+ uthread_t uthread = (uthread_t)get_bsdthread_info(current_thread());
+
+ if (uthread)
+ stack = (syscall_arg_t *)uthread->t_dtrace_syscall_args;
+
+ if (!stack)
+ return(0);
+
+ DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
+ /* dtrace_probe arguments arg0 .. arg4 are 64bits wide */
+ val = (uint64_t)*(stack+argno);
+ DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
+ return (val);
+}
+
+
+static uint64_t
+machtrace_getarg(void *arg, dtrace_id_t id, void *parg, int argno, int aframes)
+{
+#pragma unused(arg,id,parg,aframes) /* __APPLE__ */
+ uint64_t val = 0;
+ syscall_arg_t *stack = (syscall_arg_t *)NULL;
+
+ uthread_t uthread = (uthread_t)get_bsdthread_info(current_thread());
+
+ if (uthread)
+ stack = (syscall_arg_t *)uthread->t_dtrace_syscall_args;
+
+ if (!stack)
+ return(0);
+
+ DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
+ /* dtrace_probe arguments arg0 .. arg4 are 64bits wide */
+ val = (uint64_t)*(stack+argno);
+ DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
+ return (val);
+}
+