From d82aac45a7feaa891ad7670704aa3336f70d90d8 Mon Sep 17 00:00:00 2001 From: Martin Cermak Date: Wed, 1 Apr 2015 08:53:46 +0200 Subject: [PATCH] Add syscall test coverage per PR18151: * tapset/linux/syscalls.stp: Fix syscall.{[compat_]lookup_dcookie, iopl,mincore} probes. * tapset/linux/nd_syscalls.stp: Fix nd_syscall.{[compat_]lookup_dcookie, iopl,mincore} probes. * tapset/linux/x86_64/syscalls.stp: Add syscall.compat_lookup_dcookie probe. * tapset/linux/s390/syscalls.stp: Ditto. * tapset/linux/powerpc/syscalls.stp: Ditto. * tapset/linux/x86_64/nd_syscalls.stp: Add nd_syscall.compat_lookup_dcookie probe. * tapset/linux/s390/nd_syscalls.stp: Ditto. * tapset/linux/powerpc/nd_syscalls.stp: Ditto. * tapset/linux/i386/syscalls.stp: Fix syscall.iopl probe. * tapset/linux/i386/nd_syscalls.stp: Fix nd_syscall.iopl probe. * testsuite/buildok/nd_syscalls-arch-detailed.stp: Add testcases. * testsuite/buildok/nd_syscalls-detailed.stp: Ditto. * testsuite/buildok/syscalls-arch-detailed.stp: Ditto. * testsuite/buildok/syscalls-detailed.stp: Ditto. * testsuite/systemtap.syscall/chroot.c: New testcase. * testsuite/systemtap.syscall/dcookie.c: New testcase. * testsuite/systemtap.syscall/forkwait.c: Cover getpid(), getppid() and gettid(). * testsuite/systemtap.syscall/ioperm.c: Cover iopl(). * testsuite/systemtap.syscall/mincore.c: New testcase. --- tapset/linux/i386/nd_syscalls.stp | 11 +++- tapset/linux/i386/syscalls.stp | 7 +- tapset/linux/nd_syscalls.stp | 17 ++++- tapset/linux/powerpc/nd_syscalls.stp | 25 +++++++ tapset/linux/powerpc/syscalls.stp | 24 +++++++ tapset/linux/s390/nd_syscalls.stp | 25 +++++++ tapset/linux/s390/syscalls.stp | 19 ++++++ tapset/linux/syscalls.stp | 10 +-- tapset/linux/x86_64/nd_syscalls.stp | 28 +++++++- tapset/linux/x86_64/syscalls.stp | 27 +++++++- .../buildok/nd_syscalls-arch-detailed.stp | 1 + testsuite/buildok/nd_syscalls-detailed.stp | 4 +- testsuite/buildok/syscalls-arch-detailed.stp | 1 + testsuite/buildok/syscalls-detailed.stp | 4 +- testsuite/systemtap.syscall/chroot.c | 18 +++++ testsuite/systemtap.syscall/dcookie.c | 66 +++++++++++++++++++ testsuite/systemtap.syscall/forkwait.c | 16 ++++- testsuite/systemtap.syscall/ioperm.c | 12 ++++ testsuite/systemtap.syscall/mincore.c | 35 ++++++++++ 19 files changed, 332 insertions(+), 18 deletions(-) create mode 100644 testsuite/systemtap.syscall/chroot.c create mode 100644 testsuite/systemtap.syscall/dcookie.c create mode 100644 testsuite/systemtap.syscall/mincore.c diff --git a/tapset/linux/i386/nd_syscalls.stp b/tapset/linux/i386/nd_syscalls.stp index c28f272d8..de18be354 100644 --- a/tapset/linux/i386/nd_syscalls.stp +++ b/tapset/linux/i386/nd_syscalls.stp @@ -22,14 +22,19 @@ probe nd_syscall.get_thread_area.return = kprobe.function("sys_get_thread_area") } # iopl _______________________________________________________ -# long sys_iopl(unsigned long unused) # NOTE. This function is only in i386 and x86_64 and its args vary -# between those two archs. +# between those two archs: +# el5: asmlinkage long sys_iopl(unsigned long unused) +# el6: long sys_iopl(struct pt_regs *regs) +# [ ... ] unsigned int level = regs->bx; +# f20: SYSCALL_DEFINE1(iopl, unsigned int, level) # probe nd_syscall.iopl = kprobe.function("sys_iopl") { name = "iopl" - argstr = "" + asmlinkage() + level = uint_arg(1) + argstr = sprint(level) } probe nd_syscall.iopl.return = kprobe.function("sys_iopl").return { diff --git a/tapset/linux/i386/syscalls.stp b/tapset/linux/i386/syscalls.stp index 9b581c4f7..79919a0b6 100644 --- a/tapset/linux/i386/syscalls.stp +++ b/tapset/linux/i386/syscalls.stp @@ -22,11 +22,16 @@ probe syscall.get_thread_area.return = kernel.function("sys_get_thread_area").re # long sys_iopl(unsigned long unused) # NOTE. This function is only in i386 and x86_64 and its args vary # between those two archs. +# el5: asmlinkage long sys_iopl(unsigned long unused) +# el6: long sys_iopl(struct pt_regs *regs) +# [ ... ] unsigned int level = regs->bx; +# f20: SYSCALL_DEFINE1(iopl, unsigned int, level) # probe syscall.iopl = kernel.function("sys_iopl") { name = "iopl" - argstr = "" + level = __uint32(@choose_defined($level, @choose_defined($unused, $regs->bx))) + argstr = sprint(level) } probe syscall.iopl.return = kernel.function("sys_iopl").return { diff --git a/tapset/linux/nd_syscalls.stp b/tapset/linux/nd_syscalls.stp index 973ee0f5c..38614a4b8 100644 --- a/tapset/linux/nd_syscalls.stp +++ b/tapset/linux/nd_syscalls.stp @@ -3341,13 +3341,24 @@ probe nd_syscall.lookup_dcookie = kprobe.function("sys_lookup_dcookie") ? { name = "lookup_dcookie" asmlinkage() +%( CONFIG_64BIT == "y" %? + @__syscall_gate_compat_simple cookie = ulonglong_arg(1) buffer_uaddr = pointer_arg(2) len = ulong_arg(3) - argstr = sprintf("%d, %p, %d", cookie, buffer_uaddr, len) +%: + # On a 32-bit kernel, 'long long' arguments take the space of + # 2 arguments, so we have to adjust the following argument + # numbers. + cookie = ulonglong_arg(1) + buffer_uaddr = pointer_arg(3) + len = ulong_arg(4) +%) + argstr = sprintf("%#lx, %p, %#x", cookie, buffer_uaddr, len) } probe nd_syscall.lookup_dcookie.return = kprobe.function("sys_lookup_dcookie").return ? { + @__syscall_gate_compat_simple name = "lookup_dcookie" retstr = returnstr(1) } @@ -3599,10 +3610,10 @@ probe nd_syscall.mincore = kprobe.function("sys_mincore") ? { name = "mincore" asmlinkage() - start = ulong_arg(1) + start = pointer_arg(1) length = ulong_arg(2) vec_uaddr = pointer_arg(3) - argstr = sprintf("%p, %d, %p", start, length, vec_uaddr) + argstr = sprintf("%p, %u, %p", start, length, vec_uaddr) } probe nd_syscall.mincore.return = kprobe.function("sys_mincore").return ? { diff --git a/tapset/linux/powerpc/nd_syscalls.stp b/tapset/linux/powerpc/nd_syscalls.stp index a56cb1abd..aef3a6eb7 100644 --- a/tapset/linux/powerpc/nd_syscalls.stp +++ b/tapset/linux/powerpc/nd_syscalls.stp @@ -946,3 +946,28 @@ probe nd_syscall.compat_execve.return = retstr = returnstr(1) } %) + +# lookup_dcookie _____________________________________________ +# COMPAT_SYSCALL_DEFINE4(lookup_dcookie, u32, w0, u32, w1, char __user *, buf, +# compat_size_t, len) +# long ppc32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char __user *buf, +# size_t len) +# +probe nd_syscall.compat_lookup_dcookie = + kprobe.function("compat_sys_lookup_dcookie") ?, + kprobe.function("ppc32_lookup_dcookie") ? +{ + name = "lookup_dcookie" + asmlinkage() + cookie = ((uint_arg(1) << 32) | uint_arg(2)) + buffer_uaddr = pointer_arg(3) + len = ulong_arg(4) + argstr = sprintf("%#lx, %p, %#x", cookie, buffer_uaddr, len) +} +probe nd_syscall.compat_lookup_dcookie.return = + kprobe.function("compat_sys_lookup_dcookie").return ?, + kprobe.function("ppc32_lookup_dcookie").return ? +{ + name = "lookup_dcookie" + retstr = returnstr(1) +} diff --git a/tapset/linux/powerpc/syscalls.stp b/tapset/linux/powerpc/syscalls.stp index 1f3e326d5..6f6a5e892 100644 --- a/tapset/linux/powerpc/syscalls.stp +++ b/tapset/linux/powerpc/syscalls.stp @@ -820,3 +820,27 @@ probe syscall.compat_execve.return = retstr = return_str(1, $return) } %) + +# lookup_dcookie _____________________________________________ +# COMPAT_SYSCALL_DEFINE4(lookup_dcookie, u32, w0, u32, w1, char __user *, buf, +# compat_size_t, len) +# long ppc32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char __user *buf, +# size_t len) +# +probe syscall.compat_lookup_dcookie = + kernel.function("compat_sys_lookup_dcookie") ?, + kernel.function("ppc32_lookup_dcookie") ? +{ + name = "lookup_dcookie" + cookie = (@choose_defined($w0, $cookie_high) << 32 | @choose_defined($w1, $cookie_low)) + buffer_uaddr = $buf + len = __ulong($len) + argstr = sprintf("%#lx, %p, %#x", cookie, buffer_uaddr, len) +} +probe syscall.compat_lookup_dcookie.return = + kernel.function("compat_sys_lookup_dcookie").return ?, + kernel.function("ppc32_lookup_dcookie").return ? +{ + name = "lookup_dcookie" + retstr = return_str(1, $return) +} diff --git a/tapset/linux/s390/nd_syscalls.stp b/tapset/linux/s390/nd_syscalls.stp index 6fedb57d3..84b78eaac 100644 --- a/tapset/linux/s390/nd_syscalls.stp +++ b/tapset/linux/s390/nd_syscalls.stp @@ -449,4 +449,29 @@ probe nd_syscall.compat_execve.return = retstr = returnstr(1) } %) + +# lookup_dcookie _____________________________________________ +# rhel7: COMPAT_SYSCALL_DEFINE4(lookup_dcookie, u32, w0, u32, w1, char __user *, +# buf, compat_size_t, len) +# rhel[56]: kprobe.function("sys32_lookup_dcookie_wrapper") +# +probe nd_syscall.compat_lookup_dcookie = + kprobe.function("compat_sys_lookup_dcookie") ?, + kprobe.function("sys32_lookup_dcookie_wrapper") ? +{ + name = "lookup_dcookie" + asmlinkage() + cookie = ((uint_arg(1) << 32) | uint_arg(2)) + buffer_uaddr = pointer_arg(3) + len = ulong_arg(4) + argstr = sprintf("%#lx, %p, %#x", cookie, buffer_uaddr, len) +} +probe nd_syscall.compat_lookup_dcookie.return = + kprobe.function("compat_sys_lookup_dcookie").return ?, + kprobe.function("sys32_lookup_dcookie_wrapper").return ? +{ + name = "lookup_dcookie" + retstr = returnstr(1) +} + %) diff --git a/tapset/linux/s390/syscalls.stp b/tapset/linux/s390/syscalls.stp index 7e11a9fa1..2eadce22d 100644 --- a/tapset/linux/s390/syscalls.stp +++ b/tapset/linux/s390/syscalls.stp @@ -440,4 +440,23 @@ probe syscall.compat_execve.return = kernel.function("sys32_execve").return ? retstr = return_str(1, $return) } %) + +# lookup_dcookie _____________________________________________ +# long sys_lookup_dcookie(u64 cookie64, char __user * buf, size_t len) +# there is compat_SyS_lookup_dcookie on thel7, but not on older distros, +# in this case probing for sys_lookup_dcookie seems safe +probe syscall.compat_lookup_dcookie = kernel.function("sys_lookup_dcookie").call ? +{ + name = "lookup_dcookie" + cookie = $cookie64 + buffer_uaddr = $buf + len = __ulong($len) + argstr = sprintf("%#lx, %p, %#x", $cookie64, $buf, $len) +} +probe syscall.compat_lookup_dcookie.return = kernel.function("sys_lookup_dcookie").return ? +{ + name = "lookup_dcookie" + retstr = return_str(1, $return) +} + %) diff --git a/tapset/linux/syscalls.stp b/tapset/linux/syscalls.stp index 6466679a4..414510a12 100644 --- a/tapset/linux/syscalls.stp +++ b/tapset/linux/syscalls.stp @@ -3142,14 +3142,16 @@ probe syscall.llseek.return = kernel.function("sys_llseek").return ? # probe syscall.lookup_dcookie = kernel.function("sys_lookup_dcookie").call ? { + @__syscall_gate_compat_simple name = "lookup_dcookie" cookie = $cookie64 buffer_uaddr = $buf - len = $len - argstr = sprintf("%d, %p, %d", $cookie64, $buf, $len) + len = __ulong($len) + argstr = sprintf("%#lx, %p, %#x", $cookie64, $buf, $len) } probe syscall.lookup_dcookie.return = kernel.function("sys_lookup_dcookie").return ? { + @__syscall_gate_compat_simple name = "lookup_dcookie" retstr = return_str(1, $return) } @@ -3405,9 +3407,9 @@ probe syscall.mincore = kernel.function("sys_mincore").call ? { name = "mincore" start = $start - length = $len + length = __ulong($len) vec_uaddr = $vec - argstr = sprintf("%p, %d, %p", $start, $len, $vec) + argstr = sprintf("%p, %u, %p", start, length, vec_uaddr) } probe syscall.mincore.return = kernel.function("sys_mincore").return ? { diff --git a/tapset/linux/x86_64/nd_syscalls.stp b/tapset/linux/x86_64/nd_syscalls.stp index 90b5c3645..ef42e9024 100644 --- a/tapset/linux/x86_64/nd_syscalls.stp +++ b/tapset/linux/x86_64/nd_syscalls.stp @@ -33,7 +33,7 @@ probe nd_syscall.iopl = kprobe.function("sys_iopl") name = "iopl" // level = (@defined($level) ? $level : $new_iopl) asmlinkage() - level = int_arg(1) + level = uint_arg(1) argstr = sprint(level) } probe nd_syscall.iopl.return = kprobe.function("sys_iopl").return @@ -375,3 +375,29 @@ probe nd_syscall.compat_execve.return = kprobe.function("sys32_execve").return ? retstr = returnstr(1) } %) + +# lookup_dcookie _____________________________________________ +# COMPAT_SYSCALL_DEFINE4(lookup_dcookie, u32, w0, u32, w1, char __user *, +# buf, compat_size_t, len) +# long sys32_lookup_dcookie(u32 addr_low, u32 addr_high, char __user *buf, +# size_t len) +# +probe nd_syscall.compat_lookup_dcookie = + kprobe.function("compat_sys_lookup_dcookie") ?, + kprobe.function("sys32_lookup_dcookie") ? +{ + name = "lookup_dcookie" + asmlinkage() + cookie = ((uint_arg(2) << 32) | uint_arg(1)) + buffer_uaddr = pointer_arg(3) + len = ulong_arg(4) + argstr = sprintf("%#lx, %p, %#x", cookie, buffer_uaddr, len) +} +probe nd_syscall.compat_lookup_dcookie.return = + kprobe.function("compat_sys_lookup_dcookie").return ?, + kprobe.function("sys32_lookup_dcookie").return ? +{ + name = "lookup_dcookie" + retstr = returnstr(1) +} + diff --git a/tapset/linux/x86_64/syscalls.stp b/tapset/linux/x86_64/syscalls.stp index b02a7e28c..1d1e704d9 100644 --- a/tapset/linux/x86_64/syscalls.stp +++ b/tapset/linux/x86_64/syscalls.stp @@ -27,7 +27,7 @@ probe syscall.arch_prctl.return = kernel.function("sys_arch_prctl").return probe syscall.iopl = kernel.function("sys_iopl") { name = "iopl" - level = @choose_defined($level, $new_iopl) + level = __uint32(@choose_defined($level, $new_iopl)) argstr = sprint(level) } probe syscall.iopl.return = kernel.function("sys_iopl").return @@ -414,3 +414,28 @@ probe syscall.compat_execve.return = kernel.function("sys32_execve").return ? retstr = return_str(1, $return) } %) + +# lookup_dcookie _____________________________________________ +# COMPAT_SYSCALL_DEFINE4(lookup_dcookie, u32, w0, u32, w1, char __user *, +# buf, compat_size_t, len) +# long sys32_lookup_dcookie(u32 addr_low, u32 addr_high, char __user *buf, +# size_t len) +# +probe syscall.compat_lookup_dcookie = + kernel.function("compat_sys_lookup_dcookie") ?, + kernel.function("sys32_lookup_dcookie") ? +{ + name = "lookup_dcookie" + cookie = (@choose_defined($w1, $addr_high) << 32 | @choose_defined($w0, $addr_low)) + buffer_uaddr = $buf + len = __ulong($len) + argstr = sprintf("%#lx, %p, %#x", cookie, buffer_uaddr, len) +} +probe syscall.compat_lookup_dcookie.return = + kernel.function("compat_sys_lookup_dcookie").return ?, + kernel.function("sys32_lookup_dcookie").return ? +{ + name = "lookup_dcookie" + retstr = return_str(1, $return) +} + diff --git a/testsuite/buildok/nd_syscalls-arch-detailed.stp b/testsuite/buildok/nd_syscalls-arch-detailed.stp index 44cc3a96f..b45d2d062 100755 --- a/testsuite/buildok/nd_syscalls-arch-detailed.stp +++ b/testsuite/buildok/nd_syscalls-arch-detailed.stp @@ -81,6 +81,7 @@ probe nd_syscall.get_thread_area.return probe nd_syscall.iopl { printf("%s, %s\n", name, argstr) + printf("%d\n", level) } probe nd_syscall.iopl.return { diff --git a/testsuite/buildok/nd_syscalls-detailed.stp b/testsuite/buildok/nd_syscalls-detailed.stp index 37a9ce36d..6ffda76db 100755 --- a/testsuite/buildok/nd_syscalls-detailed.stp +++ b/testsuite/buildok/nd_syscalls-detailed.stp @@ -1136,12 +1136,12 @@ probe nd_syscall.llseek.return ? printf("%s, %s\n", name, retstr) } -probe nd_syscall.lookup_dcookie +probe nd_syscall.lookup_dcookie, nd_syscall.compat_lookup_dcookie ? { printf("%s, %s\n", name, argstr) printf("%d, %p, %d\n", cookie, buffer_uaddr, len) } -probe nd_syscall.lookup_dcookie.return +probe nd_syscall.lookup_dcookie.return, nd_syscall.compat_lookup_dcookie.return ? { printf("%s, %s\n", name, retstr) } diff --git a/testsuite/buildok/syscalls-arch-detailed.stp b/testsuite/buildok/syscalls-arch-detailed.stp index 905606a37..4c6fa10ce 100755 --- a/testsuite/buildok/syscalls-arch-detailed.stp +++ b/testsuite/buildok/syscalls-arch-detailed.stp @@ -81,6 +81,7 @@ probe syscall.get_thread_area.return probe syscall.iopl { printf("%s, %s\n", name, argstr) + printf("%d\n", level) } probe syscall.iopl.return { diff --git a/testsuite/buildok/syscalls-detailed.stp b/testsuite/buildok/syscalls-detailed.stp index e529f2126..7d35d540a 100755 --- a/testsuite/buildok/syscalls-detailed.stp +++ b/testsuite/buildok/syscalls-detailed.stp @@ -1134,12 +1134,12 @@ probe syscall.llseek.return ? printf("%s, %s\n", name, retstr) } -probe syscall.lookup_dcookie +probe syscall.lookup_dcookie, syscall.compat_lookup_dcookie ? { printf("%s, %s\n", name, argstr) printf("%d, %p, %d\n", cookie, buffer_uaddr, len) } -probe syscall.lookup_dcookie.return +probe syscall.lookup_dcookie.return, syscall.compat_lookup_dcookie.return ? { printf("%s, %s\n", name, retstr) } diff --git a/testsuite/systemtap.syscall/chroot.c b/testsuite/systemtap.syscall/chroot.c new file mode 100644 index 000000000..99ddb686d --- /dev/null +++ b/testsuite/systemtap.syscall/chroot.c @@ -0,0 +1,18 @@ +/* COVERAGE: chroot */ + +#include + +int main() +{ + chroot("/tmp"); + //staptest// chroot ("/tmp") = 0 + + chroot((const char *)-1); +#ifdef __s390__ + //staptest// chroot ([7]?[f]+) +#else + //staptest// chroot ([f]+) +#endif + + return 0; +} diff --git a/testsuite/systemtap.syscall/dcookie.c b/testsuite/systemtap.syscall/dcookie.c new file mode 100644 index 000000000..0a25a303a --- /dev/null +++ b/testsuite/systemtap.syscall/dcookie.c @@ -0,0 +1,66 @@ +#define _GNU_SOURCE +#include +#include +#include + +#define LENGTH 255 + +// lookup_dcookie() is a special-purpose system call, currently +// used only by the oprofile profiler. Used by v0.4 <= opcontrol <= v0.9. +// http://oprofile.sourceforge.net/doc/internals/sample-file-generation.html + +// from oprofile 0.9 source (daemon/opd_cookie.h): +typedef unsigned long long cookie_t; + +// from oprofile 0.9 source (daemon/opd_cookie.c): +#if (defined(__powerpc__) && !defined(__powerpc64__)) || defined(__hppa__)\ + || (defined(__s390__) && !defined(__s390x__)) \ + || (defined(__mips__) && (_MIPS_SIM == _MIPS_SIM_ABI32) \ + && defined(__MIPSEB__)) \ + || (defined(__arm__) && defined(__ARM_EABI__) \ + && defined(__ARMEB__)) +static inline int lookup_dcookie(cookie_t cookie, char * buf, size_t size) +{ + return syscall(__NR_lookup_dcookie, (unsigned long)(cookie >> 32), + (unsigned long)(cookie & 0xffffffff), buf, size); +} +#elif (defined(__mips__) && (_MIPS_SIM == _MIPS_SIM_ABI32)) \ + || (defined(__arm__) && defined(__ARM_EABI__)) \ + || (defined(__tile__) && !defined(__LP64__)) +static inline int lookup_dcookie(cookie_t cookie, char * buf, size_t size) +{ + return syscall(__NR_lookup_dcookie, + (unsigned long)(cookie & 0xffffffff), + (unsigned long)(cookie >> 32), buf, size); +} +#else +static inline int lookup_dcookie(cookie_t cookie, char * buf, size_t size) +{ + return syscall(__NR_lookup_dcookie, cookie, buf, size); +} +#endif + +int main() +{ + char buf[LENGTH]; + cookie_t c = 0; + + lookup_dcookie(0x12345678abcdefabLL, (char *)0x11223344, LENGTH); + //staptest// lookup_dcookie (0x12345678abcdefab, 0x11223344, 0xff) = NNNN (EINVAL) + + lookup_dcookie(-1, (char *)0, 0); + //staptest// lookup_dcookie (0xffffffffffffffff, 0x0, 0x0) = NNNN (EINVAL) + + lookup_dcookie(0, (char *)-1, 0); +#ifdef __s390__ + //staptest// lookup_dcookie (0x0, 0x[7]?[f]+, 0x0) = NNNN (EINVAL) +#else + //staptest// lookup_dcookie (0x0, 0x[f]+, 0x0) = NNNN (EINVAL) +#endif + + lookup_dcookie(0, (char *)0, -1); + //staptest// lookup_dcookie (0x0, 0x0, 0x[f]+) = NNNN (EINVAL) + + + return 0; +} diff --git a/testsuite/systemtap.syscall/forkwait.c b/testsuite/systemtap.syscall/forkwait.c index a1b8e6058..3556b11b5 100644 --- a/testsuite/systemtap.syscall/forkwait.c +++ b/testsuite/systemtap.syscall/forkwait.c @@ -1,10 +1,13 @@ -/* COVERAGE: fork wait4 */ +/* COVERAGE: fork wait4 getpid getppid gettid */ + +#define _GNU_SOURCE #include #include #include #include #include #include +#include int main () { @@ -28,5 +31,16 @@ int main () wait4(child, &status, WNOHANG, NULL); //staptest// wait4 (NNNN, XXXX, WNOHANG, XXXX) = NNNN + // we need syscall() otherwise glibc would eliminate the system call + syscall(__NR_getpid); + //staptest// getpid () = NNNN + + getppid(); + //staptest// getppid () = NNNN + + // Note: There is no glibc wrapper for this system call + syscall(__NR_gettid); + //staptest// gettid () = NNNN + return 0; } diff --git a/testsuite/systemtap.syscall/ioperm.c b/testsuite/systemtap.syscall/ioperm.c index 691db8387..c108c7cf4 100644 --- a/testsuite/systemtap.syscall/ioperm.c +++ b/testsuite/systemtap.syscall/ioperm.c @@ -46,5 +46,17 @@ int main() { #endif #endif /* __NR_ioperm */ +#if defined(__i386__) || defined(__x86_64__) + // NOTE. This function is only in i386 and x86_64 and + // its args vary between those two archs. Not all are + // being addressed in the tapset. + + iopl(3); + //staptest// iopl (3) = 0 + + iopl(-1); + //staptest// iopl (4294967295) = NNNN +#endif + return 0; } diff --git a/testsuite/systemtap.syscall/mincore.c b/testsuite/systemtap.syscall/mincore.c new file mode 100644 index 000000000..f0fca335b --- /dev/null +++ b/testsuite/systemtap.syscall/mincore.c @@ -0,0 +1,35 @@ +/* COVERAGE: mincore */ + +#include +#include + +static unsigned char *vec; + +int main() +{ + mincore((void *)0, 0, vec); + //staptest// mincore (0x0, 0, 0x0) = 0 + + mincore((void *)-1, 0, vec); +#if __s390__ + //staptest// mincore (0x[7]?[f]+, 0, 0x0) +#else + //staptest// mincore (0x[f]+, 0, 0x0) +#endif + + mincore(0, -1, vec); +#if __WORDSIZE==64 + //staptest// mincore (0x0, 18446744073709551615, 0x0) +#else + //staptest// mincore (0x0, 4294967295, 0x0) +#endif + + mincore(0, 0, (unsigned char *)-1); +#ifdef __s390__ + //staptest// mincore (0x0, 0, 0x[7]?[f]+) +#else + //staptest// mincore (0x0, 0, 0x[f]+) +#endif + + return 0; +} -- 2.43.5