strlcpy (STAP_RETVALUE, "NULL", MAXSTRINGLEN);
else {
if(_stp_copy_from_user((char *)&its, ptr,sizeof(struct itimerspec)))
- strlcpy (STAP_RETVALUE, "UNKNOWN", MAXSTRINGLEN);
+ snprintf(STAP_RETVALUE, MAXSTRINGLEN, "0x%lx",
+ (unsigned long)ptr);
else
snprintf(STAP_RETVALUE, MAXSTRINGLEN, "[%d.%06d,%d.%06d]",
(int)its.it_interval.tv_sec, (int)its.it_interval.tv_nsec,
strlcpy (STAP_RETVALUE, "NULL", MAXSTRINGLEN);
else {
if (_stp_copy_from_user((char *)&its, ptr, sizeof(its)))
- strlcpy (STAP_RETVALUE, "UNKNOWN", MAXSTRINGLEN);
+ snprintf(STAP_RETVALUE, MAXSTRINGLEN, "0x%lx",
+ (unsigned long)ptr);
else
snprintf(STAP_RETVALUE, MAXSTRINGLEN,
"[%d.%06d,%d.%06d]",
#
# long sys_timer_gettime(timer_t timer_id,
# struct itimerspec __user *setting)
+# long compat_sys_timer_gettime(timer_t timer_id,
+# struct itimerspec __user *setting)
#
-probe nd_syscall.timer_gettime = kprobe.function("sys_timer_gettime") ?
+probe nd_syscall.timer_gettime = __nd_syscall.timer_gettime,
+ __nd_syscall.compat_timer_gettime ?
{
name = "timer_gettime"
+}
+
+probe __nd_syscall.timer_gettime = kprobe.function("sys_timer_gettime")
+{
+ @__syscall_gate(%{ __NR_timer_gettime %})
+ asmlinkage()
+ timerid = int_arg(1)
+ value_uaddr = pointer_arg(2)
+ argstr = sprintf("%d, %p", timerid, value_uaddr)
+}
+probe __nd_syscall.compat_timer_gettime = kprobe.function("compat_sys_timer_gettime") ?
+{
asmlinkage()
timerid = int_arg(1)
value_uaddr = pointer_arg(2)
argstr = sprintf("%d, %p", timerid, value_uaddr)
}
-probe nd_syscall.timer_gettime.return = kprobe.function("sys_timer_gettime").return ?
+probe nd_syscall.timer_gettime.return =
+ __nd_syscall.timer_gettime.return,
+ kprobe.function("compat_sys_timer_gettime").return ?
{
name = "timer_gettime"
retstr = returnstr(1)
}
+probe __nd_syscall.timer_gettime.return = kprobe.function("sys_timer_gettime").return
+{
+ @__syscall_gate(%{ __NR_timer_gettime %})
+}
# timer_settime ______________________________________________
#
probe syscall.timer_delete = kernel.function("sys_timer_delete").call
{
name = "timer_delete"
- timerid = $timer_id
- argstr = sprint($timer_id)
+ timerid = __int32($timer_id)
+ argstr = sprint(__int32($timer_id))
}
probe syscall.timer_delete.return = kernel.function("sys_timer_delete").return
{
probe syscall.timer_getoverrun = kernel.function("sys_timer_getoverrun").call
{
name = "timer_getoverrun"
- timerid = $timer_id
- argstr = sprint($timer_id)
+ timerid = __int32($timer_id)
+ argstr = sprint(__int32($timer_id))
}
probe syscall.timer_getoverrun.return = kernel.function("sys_timer_getoverrun").return
{
#
# long sys_timer_gettime(timer_t timer_id,
# struct itimerspec __user *setting)
+# long compat_sys_timer_gettime(timer_t timer_id,
+# struct itimerspec __user *setting)
#
-probe syscall.timer_gettime = kernel.function("sys_timer_gettime").call
+probe syscall.timer_gettime = __syscall.timer_gettime,
+ __syscall.compat_timer_gettime ?
{
name = "timer_gettime"
- timerid = $timer_id
+}
+probe __syscall.timer_gettime = kernel.function("sys_timer_gettime").call
+{
+ @__syscall_gate(%{ __NR_timer_gettime %})
+ timerid = __int32($timer_id)
+ value_uaddr = $setting
+ argstr = sprintf("%d, %p", __int32($timer_id), $setting)
+}
+probe __syscall.compat_timer_gettime =
+ kernel.function("compat_sys_timer_gettime").call ?
+{
+ timerid = __int32($timer_id)
value_uaddr = $setting
- argstr = sprintf("%d, %p", $timer_id, $setting)
+ argstr = sprintf("%d, %p", __int32($timer_id), $setting)
}
-probe syscall.timer_gettime.return = kernel.function("sys_timer_gettime").return
+probe syscall.timer_gettime.return =
+ __syscall.timer_gettime.return,
+ kernel.function("compat_sys_timer_gettime").return ?
{
name = "timer_gettime"
retstr = return_str(1, $return)
}
+probe __syscall.timer_gettime.return = kernel.function("sys_timer_gettime").return
+{
+ @__syscall_gate(%{ __NR_timer_gettime %})
+}
# timer_settime ______________________________________________
#
probe __syscall.timer_settime = kernel.function("sys_timer_settime").call
{
@__syscall_gate(%{ __NR_timer_settime %})
- timerid = $timer_id
- flags = $flags
+ timerid = __int32($timer_id)
+ flags = __int32($flags)
value_uaddr = $new_setting
ovalue_uaddr = $old_setting
- argstr = sprintf("%d, %d, %s, %p", $timer_id, $flags,
+ argstr = sprintf("%d, %d, %s, %p", __int32($timer_id), __int32($flags),
_struct_itimerspec_u($new_setting), $old_setting)
}
probe __syscall.compat_timer_settime =
kernel.function("compat_sys_timer_settime").call ?
{
- timerid = $timer_id
- flags = $flags
+ timerid = __int32($timer_id)
+ flags = __int32($flags)
value_uaddr = $new
ovalue_uaddr = $old
- argstr = sprintf("%d, %d, %s, %p", $timer_id, $flags,
+ argstr = sprintf("%d, %d, %s, %p", __int32($timer_id), __int32($flags),
_struct_compat_itimerspec_u($new), $old)
}
probe syscall.timer_settime.return =
return
}
- set res [target_compile $filename $syscall_dir/$testname executable $flags]
+ set flags "$flags additional_flags=-lrt"
+ set res [target_compile $filename $syscall_dir/$testname executable $flags ]
if { $res != "" } {
send_log "$bits-bit $testname $suite : no corresponding devel environment found\n"
untested "$bits-bit $testname $suite"
int main()
{
- timer_t tid=0;
- struct itimerspec val, oval;
+ timer_t tid=0;
+ struct itimerspec val, oval;
- syscall(SYS_timer_create, CLOCK_REALTIME, NULL, &tid);
- //staptest// timer_create (CLOCK_REALTIME, 0x[0]+, XXXX)
- syscall(SYS_timer_gettime, tid, &val);
- //staptest// timer_gettime (NNNN, XXXX)
+ // SYSCALL timer_create -----
- syscall(SYS_timer_settime, 0, tid, &val, &oval);
- //staptest// timer_settime (0, NNNN, \[0.000000,0.000000\], XXXX)
+ syscall(__NR_timer_create, -1, NULL, &tid);
+ //staptest// timer_create (0x[f]+, 0x0, XXXX) = NNNN (EINVAL)
- syscall(SYS_timer_getoverrun, tid);
- //staptest// timer_getoverrun (NNNN)
+ syscall(__NR_timer_create, CLOCK_REALTIME, -1, &tid);
+#ifdef __s390__
+ //staptest// timer_create (CLOCK_REALTIME, 0x[7]?[f]+, XXXX) = NNNN (EFAULT)
+#else
+ //staptest// timer_create (CLOCK_REALTIME, 0x[f]+, XXXX) = NNNN (EFAULT)
+#endif
- syscall(SYS_timer_delete, tid);
- //staptest// timer_delete (NNNN)
+ syscall(__NR_timer_create, CLOCK_REALTIME, NULL, -1);
+#ifdef __s390__
+ //staptest// timer_create (CLOCK_REALTIME, 0x0, 0x[7]?[f]+) = NNNN (EFAULT)
+#else
+ //staptest// timer_create (CLOCK_REALTIME, 0x0, 0x[f]+) = NNNN (EFAULT)
+#endif
- return 0;
+ timer_create(CLOCK_REALTIME, NULL, &tid);
+ //staptest// timer_create (CLOCK_REALTIME, XXXX, XXXX) = 0
+
+
+ // SYSCALL timer_gettime -----
+
+ syscall(__NR_timer_gettime, -1, &val);
+ //staptest// timer_gettime (-1, XXXX) = NNNN (EINVAL)
+
+ syscall(__NR_timer_gettime, tid, -1);
+#ifdef __s390__
+ //staptest// timer_gettime (NNNN, 0x[7]?[f]+) = NNNN (EINVAL)
+#else
+ //staptest// timer_gettime (NNNN, 0x[f]+) = NNNN (EINVAL)
+#endif
+
+ timer_gettime(tid, &val);
+ //staptest// timer_gettime (NNNN, XXXX) = 0
+
+
+ // SYSCALL timer_settime -----
+
+ val.it_value.tv_sec = 0;
+ val.it_value.tv_nsec = 0;
+ val.it_interval.tv_sec = 0;
+ val.it_interval.tv_nsec = 0;
+
+ syscall(__NR_timer_settime, -1, 0, &val, &oval);
+ //staptest// timer_settime (-1, 0, \[0.000000,0.000000\], XXXX) = NNNN (EINVAL)
+
+ syscall(__NR_timer_settime, 0, -1, &val, &oval);
+ //staptest// timer_settime (0, -1, \[0.000000,0.000000\], XXXX) = NNNN
+
+ syscall(__NR_timer_settime, tid, 0, -1, &oval);
+#ifdef __s390__
+ //staptest// timer_settime (NNNN, 0, 0x[7]?[f]+, XXXX) = NNNN (EFAULT)
+#else
+ //staptest// timer_settime (NNNN, 0, 0x[f]+, XXXX) = NNNN (EFAULT)
+#endif
+
+ syscall(__NR_timer_settime, tid, 0, &val, -1);
+#ifdef __s390__
+ //staptest// timer_settime (NNNN, 0, \[0.000000,0.000000\], 0x[7]?[f]+) = NNNN (EINVAL)
+#else
+ //staptest// timer_settime (NNNN, 0, \[0.000000,0.000000\], 0x[f]+) = NNNN (EINVAL)
+#endif
+
+ timer_settime(tid, -1, &val, &oval);
+ //staptest// timer_settime (NNNN, -1, \[0.000000,0.000000\], XXXX) = 0
+
+
+ // SYSCALL timer_getoverrun -----
+
+ syscall(__NR_timer_getoverrun, -1);
+ //staptest// timer_getoverrun (-1) = NNNN (EINVAL)
+
+ timer_getoverrun(tid);
+ //staptest// timer_getoverrun (NNNN) = 0
+
+
+ // SYSCALL timer_delete -----
+
+ syscall(__NR_timer_delete, -1);
+ //staptest// timer_delete (-1) = NNNN (EINVAL)
+
+ timer_delete(tid);
+ //staptest// timer_delete (NNNN) = 0
+
+ return 0;
}
-
+