From d27e6fd532200873fe8cc23a155360114fe26110 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Tue, 25 Aug 2009 11:54:15 -0400 Subject: PR4186 cont'd: option #2: standardize on kernel ARCH/SUBARCH throughout * main.cxx (main): Perform equivalent sed by hand on uname()->machine. * stap.1.in: Clarify -a ARCH slightly. * tapsets.cxx (validate_module_elf): Accept "arm*"for EM_ARM. * tapset/**, testsuite/**: Removed/collapsed "i386"/"i686" branches, renamed "ppc64"->"powerpc" and "s390x"->"s390". --- tapset/nd_syscalls2.stp | 12 +- tapset/powerpc/nd_syscalls.stp | 738 +++++++++++++++++++++++++++++++++++++++++ tapset/powerpc/registers.stp | 221 ++++++++++++ tapset/powerpc/syscalls.stp | 589 ++++++++++++++++++++++++++++++++ tapset/ppc64/nd_syscalls.stp | 738 ----------------------------------------- tapset/ppc64/registers.stp | 221 ------------ tapset/ppc64/syscalls.stp | 589 -------------------------------- tapset/s390/nd_syscalls.stp | 187 +++++++++++ tapset/s390/registers.stp | 221 ++++++++++++ tapset/s390/syscalls.stp | 169 ++++++++++ tapset/s390x/nd_syscalls.stp | 187 ----------- tapset/s390x/registers.stp | 221 ------------ tapset/s390x/syscalls.stp | 169 ---------- tapset/scheduler.stp | 2 +- tapset/syscalls2.stp | 6 +- 15 files changed, 2135 insertions(+), 2135 deletions(-) create mode 100644 tapset/powerpc/nd_syscalls.stp create mode 100644 tapset/powerpc/registers.stp create mode 100644 tapset/powerpc/syscalls.stp delete mode 100644 tapset/ppc64/nd_syscalls.stp delete mode 100644 tapset/ppc64/registers.stp delete mode 100644 tapset/ppc64/syscalls.stp create mode 100644 tapset/s390/nd_syscalls.stp create mode 100644 tapset/s390/registers.stp create mode 100644 tapset/s390/syscalls.stp delete mode 100644 tapset/s390x/nd_syscalls.stp delete mode 100644 tapset/s390x/registers.stp delete mode 100644 tapset/s390x/syscalls.stp (limited to 'tapset') diff --git a/tapset/nd_syscalls2.stp b/tapset/nd_syscalls2.stp index c93bf9f7..6e50d256 100644 --- a/tapset/nd_syscalls2.stp +++ b/tapset/nd_syscalls2.stp @@ -337,7 +337,7 @@ probe nd_syscall.pipe = kprobe.function("SyS_pipe") ?, %: // fildes_uaddr = $fildes // argstr = _fildes_u($fildes) - %( arch != "ppc64" %? asmlinkage() %) + %( arch != "powerpc" %? asmlinkage() %) fildes_uaddr = pointer_arg(1) argstr = _fildes_u(fildes_uaddr) %) @@ -663,7 +663,7 @@ probe nd_syscall.pwrite32 = kprobe.function("sys32_pwrite64") ? // buf_uaddr = $buf // count = $count // offset = ($poshi << 32) + $poslo -// %( arch == "s390x" %? +// %( arch == "s390" %? // buf_uaddr = $ubuf // argstr = sprintf("%d, %s, %d, %d", $fd, // text_strn(user_string($ubuf), syscall_string_trunc, 1), @@ -870,7 +870,7 @@ probe nd_syscall.readv = kprobe.function("compat_sys_readv") ?, // vector_uaddr = $vec // count = $vlen /* FIXME: RHEL4 U3 ppc64 can't resolve $fd */ -// %( arch != "ppc64" %? +// %( arch != "powerpc" %? // fd = $fd // argstr = sprintf("%d, %p, %d", $fd, $vec, $vlen) // %: @@ -2974,7 +2974,7 @@ probe nd_syscall.sigaction = kprobe.function("sys_sigaction") ? // act_uaddr = $act // oact_uaddr = $oact // argstr = sprintf("%s, {%s}, %p", _signal_name($sig), _struct_sigaction_u($act), $oact) - %( arch != "ppc64" %? asmlinkage() %) + %( arch != "powerpc" %? asmlinkage() %) sig = int_arg(1) act_uaddr = pointer_arg(2) oact_uaddr = pointer_arg(3) @@ -3994,7 +3994,7 @@ probe nd_syscall.uname = kprobe.function("sys_uname") ?, _func_name = probefunc() if (_func_name != "sys32_uname") { if (_func_name == "sys_uname" || _func_name == "sys_olduname") { - %( arch != "ppc64" %? asmlinkage() %) + %( arch != "powerpc" %? asmlinkage() %) } else asmlinkage() } @@ -4465,7 +4465,7 @@ probe nd_syscall.writev = kprobe.function("compat_sys_writev") ?, // vector_uaddr = $vec // count = $vlen /* FIXME: RHEL4 U3 ppc64 can't resolve $fd */ -// %( arch != "ppc64" %? +// %( arch != "powerpc" %? // fd = $fd // argstr = sprintf("%d, %p, %d", $fd, $vec, $vlen) // %: diff --git a/tapset/powerpc/nd_syscalls.stp b/tapset/powerpc/nd_syscalls.stp new file mode 100644 index 00000000..46267507 --- /dev/null +++ b/tapset/powerpc/nd_syscalls.stp @@ -0,0 +1,738 @@ +# PPC64-specific system calls + +# sys64_time ________________________________________ +# +# time_t sys64_time(time_t __user * tloc) +# +probe nd_syscall.sys64_time = kprobe.function("sys64_time") ? +{ + name = "sys64_time" + // argstr = sprintf("%p", $tloc) + asmlinkage() + argstr = sprintf("%p", pointer_arg(1)) +} +probe nd_syscall.sys64_time.return = kprobe.function("sys64_time").return ? +{ + name = "sys64_time" + retstr = returnstr(1) +} + +# ppc64_personality ________________________________________ +# +# long ppc64_personality(unsigned long personality) +# +probe nd_syscall.ppc64_personality = kprobe.function("ppc64_personality") +{ + name = "ppc64_personality" + // persona = $personality + // argstr = sprint($personality) + asmlinkage() + persona = ulong_arg(1) + argstr = sprint(persona) +} +probe nd_syscall.ppc64_personality.return = kprobe.function("ppc64_personality").return +{ + name = "ppc64_personality" + retstr = returnstr(1) +} + +# ppc_rtas ________________________________________ +# +# int ppc_rtas(struct rtas_args __user *uargs) +# +probe nd_syscall.ppc_rtas = kprobe.function("ppc_rtas") ? +{ + name = "ppc_rtas" + // uargs_uaddr = $uargs + // argstr = sprintf("%p", $uargs) + asmlinkage() + uargs_uaddr = pointer_arg(1) + argstr = sprintf("%p", uargs_uaddr) +} +probe nd_syscall.ppc_rtas.return = kprobe.function("ppc_rtas").return ? +{ + name = "ppc_rtas" + retstr = returnstr(1) +} + +# ppc64_sys32_stime ________________________________________ +# +# long ppc64_sys32_stime(int __user * tptr) +# +probe nd_syscall.ppc64_sys32_stime = kprobe.function("ppc64_sys32_stime") ? +{ + name = "ppc64_sys32_stime" + // t_uaddr = $tptr + // argstr = sprintf("%p", $tptr) + asmlinkage() + t_uaddr = pointer_arg(1) + argstr = sprintf("%p", t_uaddr) +} +probe nd_syscall.ppc64_sys32_stime.return = kprobe.function("ppc64_sys32_stime").return ? +{ + name = "ppc64_sys32_stime" + retstr = returnstr(1) +} + +# sys32_ptrace ________________________________________ +# (obsolete) +# int sys32_ptrace(long request, long pid, unsigned long addr, +# unsigned long data) +# +probe nd_syscall.sys32_ptrace = kprobe.function("sys32_ptrace") ? +{ + name = "sys32_ptrace" + // request = $request + // pid = $pid + // addr = $addr + // data = $data + // argstr = sprintf("%p, %p, %p, %p", $request, $pid, $addr, $data) + asmlinkage() + request = long_arg(1) + pid = long_arg(2) + addr = ulong_arg(3) + data = ulong_arg(4) + argstr = sprintf("%p, %p, %p, %p", request, pid, addr, data) +} +probe nd_syscall.sys32_ptrace.return = kprobe.function("sys32_ptrace").return ? +{ + name = "sys32_ptrace" + retstr = returnstr(1) +} + +# sys32_sysinfo ________________________________________ +# +# (obsolete) long sys32_sysinfo(struct sysinfo32 __user *info) +# +probe nd_syscall.sys32_sysinfo = kprobe.function("sys32_sysinfo") ? +{ + name = "sys32_sysinfo" + // info_uaddr = $info + asmlinkage() + info_uaddr = pointer_arg(1) + argstr = sprintf("%p", info_uaddr) +} +probe nd_syscall.sys32_sysinfo.return = kprobe.function("sys32_sysinfo").return ? +{ + name = "sys32_sysinfo" + retstr = returnstr(1) +} + +# ipc ________________________________________ +# +# long sys32_ipc(u32 call, u32 first, u32 second, u32 third, +# compat_uptr_t ptr, u32 fifth) +# +probe nd_syscall.ipc = kprobe.function("sys32_ipc") ? +{ + name = "ipc" + // argstr = sprintf("%d, %d, %d, %d, %p, %d", $call, $first, $second, + // $third, $ptr, $fifth) + asmlinkage() + argstr = sprintf("%d, %d, %d, %d, %p, %d", uint_arg(1), uint_arg(2), uint_arg(3), + uint_arg(4), uint_arg(5), uint_arg(6)) +} +probe nd_syscall.ipc.return = kprobe.function("sys32_ipc").return ? +{ + name = "sys_ipc" + retstr = returnstr(1) +} + +# sys32_sigreturn ________________________________________ +# +# long sys32_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, +# struct pt_regs *regs) +# +probe nd_syscall.sys32_sigreturn = kprobe.function("sys32_sigreturn") ? +{ + name = "sys32_sigreturn" + // r3 = $r3 + // r4 = $r4 + // // r5 = $r5 + // r6 = $r6 + // r7 = $r7 + // r8 = $r8 + // argstr = sprintf("%p, %p, %p, %p, %p, %p", + // $r3, $r4, $r5, $r6, $r7, $r8) + asmlinkage() + r3 = int_arg(1) + r4 = int_arg(2) + r5 = int_arg(3) + r6 = int_arg(4) + r7 = int_arg(5) + r8 = int_arg(6) + argstr = sprintf("%p, %p, %p, %p, %p, %p", + r3, r4, r5, r6, r7, r8) +} +probe nd_syscall.sys32_sigreturn.return = kprobe.function("sys32_sigreturn").return ? +{ + name = "sys32_sigreturn" + retstr = returnstr(1) +} + +# sys32_adjtimex ________________________________________ +# +# long sys32_adjtimex(struct timex32 __user *utp) +# +probe nd_syscall.sys32_adjtimex = kprobe.function("sys32_adjtimex") ? +{ + name = "sys32_adjtimex" + // argstr = sprintf("%p", $utp) + asmlinkage() + argstr = sprintf("%p", pointer_arg(1)) +} +probe nd_syscall.sys32_adjtimex.return = kprobe.function("sys32_adjtimex").return ? +{ + name = "sys32_adjtimex" + retstr = returnstr(1) +} + +# sys32_getdents ________________________________________ +# +# asmlinkage long sys32_getdents(unsigned int fd, +# struct linux_dirent32 __user *dirent, +# unsigned int count) +# +probe nd_syscall.sys32_getdents = kprobe.function("sys32_getdents") ? +{ + name = "sys32_getdents" + // fd = $fd + // dirp_uaddr = $dirent + // count = $count + asmlinkage() + fd = uint_arg(1) + dirp_uaddr = pointer_arg(2) + count = uint_arg(3) + argstr = sprintf("%d, %p, %d", fd, dirp_uaddr, count) +} +probe nd_syscall.sys32_getdents.return = kprobe.function("sys32_getdents").return ? +{ + name = "sys32_getdents" + retstr = returnstr(1) +} + +# compat_sys_sysctl ________________________________________ +# +# long compat_sys_sysctl(struct __sysctl_args32 __user *args) +# +probe nd_syscall.compat_sysctl = kprobe.function("compat_sys_sysctl") ? +{ + name = "sysctl" + // argstr = sprintf("%p", $args) + asmlinkage() + argstr = sprintf("%p", pointer_arg(1)) +} +probe nd_syscall.compat_sysctl.return = kprobe.function("compat_sys_sysctl").return ? +{ + name = "sysctl" + retstr = returnstr(1) +} + +# sys32_sched_setparam ________________________________________ +# +# asmlinkage long sys32_sched_setparam(u32 pid, +# struct sched_param __user *param) +# +probe nd_syscall.sys32_sched_setparam = kprobe.function("sys32_sched_setparam") ? +{ + name = "sys32_sched_setparam" + // pid = $pid + // param_uaddr = $param + asmlinkage() + pid = uint_arg(1) + param_uaddr = pointer_arg(2) + argstr = sprintf("%d, %p", pid, param_uaddr) +} +probe nd_syscall.sys32_sched_setparam.return = kprobe.function("sys32_sched_setparam").return ? +{ + name = "sys32_sched_setparam" + retstr = returnstr(1) +} + +# sys32_sched_rr_get_interval ________________________________________ +# +# asmlinkage long sys32_sched_rr_get_interval(u32 pid, +# struct compat_timespec __user *interval) +# +probe nd_syscall.sys32_sched_rr_get_interval = kprobe.function("sys32_sched_rr_get_interval") ? +{ + name = "sys32_sched_rr_get_interval" + // pid = $pid + // interval_uaddr = $interval + asmlinkage() + pid = uint_arg(1) + interval_uaddr = pointer_arg(2) + argstr = sprintf("%d, %p", pid, interval_uaddr) +} +probe nd_syscall.sys32_sched_rr_get_interval.return = kprobe.function("sys32_sched_rr_get_interval").return ? +{ + name = "sys32_sched_rr_get_interval" + retstr = returnstr(1) +} + +# sys32_rt_sigpending ________________________________________ +# +# long sys32_rt_sigpending(compat_sigset_t __user *set, +# compat_size_t sigsetsize) +# +probe nd_syscall.sys32_rt_sigpending = kprobe.function("sys32_rt_sigpending") ? +{ + name = "sys32_rt_sigpending" + // set_uaddr = $set + // sigsetsize = $sigsetsize + // argstr = sprintf("%p, %d", set_uaddr, $sigsetsize) + asmlinkage() + set_uaddr = pointer_arg(1) + sigsetsize = uint_arg(2) + argstr = sprintf("%p, %d", set_uaddr, sigsetsize) +} +probe nd_syscall.sys32_rt_sigpending.return = kprobe.function("sys32_rt_sigpending").return ? +{ + name = "sys32_rt_sigpending" + retstr = returnstr(1) +} + +# sys32_rt_sigtimedwait ________________________________________ +# +# long sys32_rt_sigtimedwait(compat_sigset_t __user *uthese, +# compat_siginfo_t __user *uinfo, +# struct compat_timespec __user *uts, +# compat_size_t sigsetsize) +# +probe nd_syscall.sys32_rt_sigtimedwait = kprobe.function("sys32_rt_sigtimedwait") ? +{ + name = "sys32_rt_sigtimedwait" + // uthese_uaddr = $uthese + // uinfo_uaddr = $uinfo + // uts_uaddr = $uts + // sigsetsize = $sigsetsize + asmlinkage() + uthese_uaddr = pointer_arg(1) + uinfo_uaddr = pointer_arg(2) + uts_uaddr = pointer_arg(3) + sigsetsize = uint_arg(4) + argstr = sprintf("%p, %p, %p, %p", uthese_uaddr, + uinfo_uaddr, uts_uaddr, sigsetsize) +} +probe nd_syscall.sys32_rt_sigtimedwait.return = kprobe.function("sys32_rt_sigtimedwait").return ? +{ + name = "sys32_rt_sigtimedwait" + retstr = returnstr(1) +} + +# sys32_rt_sigqueueinfo ________________________________________ +# +# long sys32_rt_sigqueueinfo(u32 pid, u32 sig, compat_siginfo_t __user *uinfo) +# +probe nd_syscall.sys32_rt_sigqueueinfo = kprobe.function("sys32_rt_sigqueueinfo") ? +{ + name = "sys32_rt_sigqueueinfo" + // pid = $pid + // sig = $sig + // uinfo_uaddr = $uinfo + // argstr = sprintf("%p, %s, %p", pid, _signal_name($sig), + // uinfo_uaddr) + asmlinkage() + pid = uint_arg(1) + sig = uint_arg(2) + uinfo_uaddr = pointer_arg(3) + argstr = sprintf("%p, %s, %p", pid, _signal_name(sig), + uinfo_uaddr) +} +probe nd_syscall.sys32_rt_sigqueueinfo.return = kprobe.function("sys32_rt_sigqueueinfo").return ? +{ + name = "sys32_rt_sigqueueinfo" + retstr = returnstr(1) +} + +# sys32_sigaltstack ________________________________________ +# +# int sys32_sigaltstack(u32 __new, u32 __old, int r5, +# int r6, int r7, int r8, struct pt_regs *regs) +# +probe nd_syscall.sys32_sigaltstack = kprobe.function("sys32_sigaltstack") ? +{ + name = "sys32_sigaltstack" + argstr = "FIXME" +} +probe nd_syscall.sys32_sigaltstack.return = kprobe.function("sys32_sigaltstack").return ? +{ + name = "sys32_sigaltstack" + retstr = returnstr(1) +} + +# sys32_sendfile64 ________________________________________ +# +# asmlinkage int sys32_sendfile64(int out_fd, int in_fd, +# compat_loff_t __user *offset, s32 count) +# +probe nd_syscall.sys32_sendfile64 = kprobe.function("sys32_sendfile64") ? +{ + name = "sys32_sendfile64" + // out_fd = $out_fd + // in_fd = $in_fd + // offset_uaddr = $offset + // count = $count + // argstr = sprintf("%d, %d, %p, %d", $out_fd, $in_fd, offset_uaddr, + // $count) + asmlinkage() + out_fd = int_arg(1) + in_fd = int_arg(2) + offset_uaddr = long_arg(3) + count = int_arg(4) + argstr = sprintf("%d, %d, %p, %d", out_fd, in_fd, offset_uaddr, + count) +} +probe nd_syscall.sys32_sendfile64.return = kprobe.function("sys32_sendfile64").return ? +{ + name = "sys32_sendfile64" + retstr = returnstr(1) +} + +# ppc32_timer_create ________________________________________ +# +# long ppc32_timer_create(clockid_t clock, +# struct compat_sigevent __user *ev32, +# timer_t __user *timer_id) +# +probe nd_syscall.ppc32_timer_create = kprobe.function("ppc32_timer_create") ? +{ + name = "ppc32_timer_create" + // which_clock = $clock + // timer_event_spec = $ev32 + // created_timer_id = $timer_id + asmlinkage() + which_clock = int_arg(1) + timer_event_spec = pointer_arg(2) + created_timer_id = pointer_arg(3) + argstr = sprintf("%d, %p, %p", which_clock, timer_event_spec, + created_timer_id) +} +probe nd_syscall.ppc32_timer_create.return = kprobe.function("ppc32_timer_create").return ? +{ + name = "ppc32_timer_create" + retstr = returnstr(1) +} + +# compat_timer_settime ________________________________________ +# +# long compat_timer_settime(timer_t timer_id, int flags, +# struct compat_itimerspec __user *new, +# struct compat_itimerspec __user *old) +# +probe nd_syscall.compat_timer_settime = kprobe.function("compat_timer_settime") ? +{ + name = "compat_timer_settime" + // timer_id = $timer_id + // flags = $flags + // new_setting_uaddr = $new + // old_setting_uaddr = $old + asmlinkage() + timer_id = int_arg(1) + flags = int_arg(2) + new_setting_uaddr = pointer_arg(3) + old_setting_uaddr = pointer_arg(4) + argstr = sprintf("%d, %d, %p, %p", timer_id, flags, + new_setting_uaddr, old_setting_uaddr) +} +probe nd_syscall.compat_timer_settime.return = kprobe.function("compat_timer_settime").return ? +{ + name = "compat_timer_settime" + retstr = returnstr(1) +} + +# compat_timer_gettime ________________________________________ +# +# long compat_timer_gettime(timer_t timer_id, +# struct compat_itimerspec __user *setting) +# +probe nd_syscall.compat_timer_gettime = kprobe.function("compat_timer_gettime") ? +{ + name = "compat_timer_gettime" + // timer_id = $timer_id + // setting_uaddr = $setting + asmlinkage() + timer_id = int_arg(1) + setting_uaddr = pointer_arg(2) + argstr = sprintf("%d, %p", timer_id, setting_uaddr) +} +probe nd_syscall.compat_timer_gettime.return = kprobe.function("compat_timer_gettime").return ? +{ + name = "compat_timer_gettime" + retstr = returnstr(1) +} + +# compat_clock_settime ________________________________________ +# +# long compat_clock_settime(clockid_t which_clock, +# struct compat_timespec __user *tp) +# +probe nd_syscall.compat_clock_settime = kprobe.function("compat_clock_settime") ? +{ + name = "compat_clock_settime" + // which_clock = $which_clock + // tp_uaddr = $tp + asmlinkage() + which_clock = int_arg(1) + tp_uaddr = pointer_arg(2) + argstr = sprintf("%d, %p", which_clock, tp_uaddr) +} +probe nd_syscall.compat_clock_settime.return = kprobe.function("compat_clock_settime").return ? +{ + name = "compat_clock_settime" + retstr = returnstr(1) +} + +# sys32_swapcontext ________________________________________ +# +# long sys32_swapcontext(struct ucontext32 __user *old_ctx, +# struct ucontext32 __user *new_ctx, +# int ctx_size, int r6, int r7, int r8, +# struct pt_regs *regs) +# +probe nd_syscall.sys32_swapcontext = kprobe.function("sys32_swapcontext") ? +{ + name = "sys32_swapcontext" + // old_ctx_uaddr = $old_ctx + // new_ctx_uaddr = $new_ctx + // r5 = $ctx_size + // r6 = $r6 + // r7 = $r7 + // r8 = $r8 + // regs = $regs + asmlinkage() + old_ctx_uaddr = pointer_arg(1) + new_ctx_uaddr = pointer_arg(2) + r5 = int_arg(3) + r6 = int_arg(4) + r7 = int_arg(5) + r8 = int_arg(6) + regs = pointer_arg(7) + argstr = sprintf("%p, %p, %d, %d, %d, %d, %p", + old_ctx_uaddr, new_ctx_uaddr, r5, r6, r7, r8, regs) +} +probe nd_syscall.sys32_swapcontext.return = kprobe.function("sys32_swapcontext").return ? +{ + name = "sys32_swapcontext" + retstr = returnstr(1) +} + +# sys32_utimes ________________________________________ +# +# asmlinkage long sys32_utimes(char __user *filename, +# struct compat_timeval __user *tvs) +# +probe nd_syscall.sys32_utimes = kprobe.function("sys32_utimes") ? +{ + name = "sys32_utimes" + // filename_uaddr = $filename + // path = user_string($filename) + // tvp_uaddr = $tvs + // argstr = sprintf("%s, %p", user_string_quoted($filename), tvp_uaddr) + asmlinkage() + filename_uaddr = pointer_arg(1) + path = user_string(filename_uaddr) + tvp_uaddr = pointer_arg(2) + argstr = sprintf("%s, %p", user_string_quoted(filename_uaddr), tvp_uaddr) +} +probe nd_syscall.sys32_utimes.return = kprobe.function("sys32_utimes").return ? +{ + name = "sys32_utimes" + retstr = returnstr(1) +} + +# compat_mbind ________________________________________ +# +# asmlinkage long compat_mbind(compat_ulong_t start, compat_ulong_t len, +# compat_ulong_t mode, compat_ulong_t __user *nmask, +# compat_ulong_t maxnode, compat_ulong_t flags) +# +probe nd_syscall.compat_mbind = kprobe.function("compat_mbind") ? +{ + name = "compat_mbind" + // start_uaddr = $start + // len = $len + // policy = $mode + // nodemask_uaddr = $nmask + // maxnode = $maxnode + // flags = $flags + asmlinkage() + start_uaddr = uint_arg(1) + len = uint_arg(2) + policy = uint_arg(3) + nodemask_uaddr = uint_arg(4) + maxnode = uint_arg(5) + flags = uint_arg(6) + argstr = sprintf("%p, %d, %d, %p, %d, %d", start_uaddr, len, + policy, nodemask_uaddr, maxnode, flags) +} +probe nd_syscall.compat_mbind.return = kprobe.function("compat_mbind").return ? +{ + name = "compat_mbind" + retstr = returnstr(1) +} + +# compat_get_mempolicy ________________________________________ +# +# asmlinkage long compat_get_mempolicy(int __user *policy, +# compat_ulong_t __user *nmask, +# compat_ulong_t maxnode, +# compat_ulong_t addr, compat_ulong_t flags) +# +probe nd_syscall.compat_get_mempolicy = kprobe.function("compat_get_mempolicy") ? +{ + name = "compat_get_mempolicy" + // policy_uaddr = $policy + // nmask_uaddr = $nmask + // maxnode = $maxnode + // addr = $addr + // flags = $flags + asmlinkage() + policy_uaddr = int_arg(1) + nmask_uaddr = uint_arg(2) + maxnode = uint_arg(3) + addr = uint_arg(4) + flags = uint_arg(5) + argstr = sprintf("%p, %p, %d, %d", policy_uaddr, nmask_uaddr, + maxnode, addr) +} +probe nd_syscall.compat_get_mempolicy.return = kprobe.function("compat_get_mempolicy").return ? +{ + name = "compat_get_mempolicy" + retstr = returnstr(1) +} + +# compat_set_mempolicy ________________________________________ +# +# asmlinkage long compat_set_mempolicy(int mode, compat_ulong_t __user *nmask, +# compat_ulong_t maxnode) +# +probe nd_syscall.compat_set_mempolicy = kprobe.function("compat_set_mempolicy") ? +{ + name = "compat_set_mempolicy" + // policy = $mode + // nodemask_uaddr = $nmask + // maxnode = $maxnode + asmlinkage() + policy = int_arg(1) + nodemask_uaddr = uint_arg(2) + maxnode = uint_arg(3) + argstr = sprintf("%d, %p, %d", policy, nodemask_uaddr, maxnode) +} +probe nd_syscall.compat_set_mempolicy.return = kprobe.function("compat_set_mempolicy").return ? +{ + name = "compat_set_mempolicy" + retstr = returnstr(1) +} + +# mmap +# long sys_mmap(unsigned long addr, size_t len, +# unsigned long prot, unsigned long flags, +# unsigned long fd, off_t offset) +# +probe nd_syscall.mmap = kprobe.function("sys_mmap") ? +{ + name = "mmap" + // start = $addr + // len = $len + // prot = $prot + // flags = $flags + // fd = $fd + // offset = $offset + // argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, $len, + // _mprotect_prot_str($prot), _mmap_flags($flags), $fd, $offset) + asmlinkage() + start = ulong_arg(1) + len = ulong_arg(2) + prot = ulong_arg(3) + flags = ulong_arg(4) + fd = ulong_arg(5) + offset = ulong_arg(6) + argstr = sprintf("%p, %d, %s, %s, %d, %d", start, len, + _mprotect_prot_str(prot), _mmap_flags(flags), fd, offset) +} +probe nd_syscall.mmap.return = kprobe.function("sys_mmap").return ? +{ + name = "mmap" + retstr = returnstr(2) +} + +# mmap2 +# long sys_mmap2(unsigned long addr, size_t len, +# unsigned long prot, unsigned long flags, +# unsigned long fd, unsigned long pgoff) +# long compat_sys_mmap2(unsigned long addr, size_t len, +# unsigned long prot, unsigned long flags, +# unsigned long fd, unsigned long pgoff) +# +probe nd_syscall.mmap2 = kprobe.function("sys_mmap2") ?, + kprobe.function("compat_sys_mmap2") ? +{ + name = "mmap2" + // start = $addr + // length = $len + // prot = $prot + // flags = $flags + // fd = $fd + // pgoffset = $pgoff + // argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, + // $len, _mprotect_prot_str($prot), _mmap_flags($flags), + // $fd, $pgoff) + asmlinkage() + start = ulong_arg(1) + length = ulong_arg(2) + prot = ulong_arg(3) + flags = ulong_arg(4) + fd = ulong_arg(5) + pgoffset = ulong_arg(6) + argstr = sprintf("%p, %d, %s, %s, %d, %d", start, + length, _mprotect_prot_str(prot), _mmap_flags(flags), + fd, pgoffset) +} +probe nd_syscall.mmap2.return = kprobe.function("sys_mmap2").return ?, + kprobe.function("compat_sys_mmap2").return ? +{ + name = "mmap2" + retstr = returnstr(2) +} + +# ppc64_sys_stime ________________________________________ +# +# long ppc64_sys_stime(long __user * tptr) +# +probe nd_syscall.ppc64_sys_stime = kprobe.function("ppc64_sys_stime") ? +{ + name = "ppc64_sys_stime" + /* FIXME */ + // t_uaddr = $tptr + asmlinkage() + t_uaddr = pointer_arg(1) + argstr = sprintf("%p", t_uaddr) +} +probe nd_syscall.ppc64_sys_stime.return = kprobe.function("ppc64_sys_stime").return ? +{ + name = "ppc64_sys_stime" + retstr = returnstr(1) +} + +# ppc64_newuname ________________________________________ +# +# asmlinkage int ppc64_newuname(struct new_utsname __user * name) +# +probe nd_syscall.ppc64_newuname = kprobe.function("ppc64_newuname") ? +{ + name = "ppc64_newuname" + // name_uaddr = $name + asmlinkage() + name_uaddr = pointer_arg(1) + argstr = sprintf("%p", name_uaddr) +} +probe nd_syscall.ppc64_newuname.return = kprobe.function("ppc64_newuname").return ? +{ + name = "ppc64_newuname" + retstr = returnstr(1) +} + +# +# + diff --git a/tapset/powerpc/registers.stp b/tapset/powerpc/registers.stp new file mode 100644 index 00000000..c8713e5a --- /dev/null +++ b/tapset/powerpc/registers.stp @@ -0,0 +1,221 @@ +/* Dwarfless register access for powerpc */ + +global _reg_offsets, _stp_regs_registered + +function _stp_register_regs() { + /* Same order as pt_regs */ + _reg_offsets["r0"] = 0 + _reg_offsets["r1"] = 8 + _reg_offsets["r2"] = 16 + _reg_offsets["r3"] = 24 + _reg_offsets["r4"] = 32 + _reg_offsets["r5"] = 40 + _reg_offsets["r6"] = 48 + _reg_offsets["r7"] = 56 + _reg_offsets["r8"] = 64 + _reg_offsets["r9"] = 72 + _reg_offsets["r10"] = 80 + _reg_offsets["r11"] = 88 + _reg_offsets["r12"] = 96 + _reg_offsets["r13"] = 104 + _reg_offsets["r14"] = 112 + _reg_offsets["r15"] = 120 + _reg_offsets["r16"] = 128 + _reg_offsets["r17"] = 136 + _reg_offsets["r18"] = 144 + _reg_offsets["r19"] = 152 + _reg_offsets["r20"] = 160 + _reg_offsets["r21"] = 168 + _reg_offsets["r22"] = 176 + _reg_offsets["r23"] = 184 + _reg_offsets["r24"] = 192 + _reg_offsets["r25"] = 200 + _reg_offsets["r26"] = 208 + _reg_offsets["r27"] = 216 + _reg_offsets["r28"] = 224 + _reg_offsets["r29"] = 232 + _reg_offsets["r30"] = 240 + _reg_offsets["r31"] = 248 + _reg_offsets["nip"] = 256 + _reg_offsets["msr"] = 264 + _reg_offsets["orig_gpr3"] = 272 + _reg_offsets["ctr"] = 280 + _reg_offsets["link"] = 288 + _reg_offsets["xer"] = 296 + _reg_offsets["ccr"] = 304 + _reg_offsets["softe"] = 312 + _reg_offsets["trap"] = 320 + _reg_offsets["dar"] = 328 + _reg_offsets["dsisr"] = 336 + _reg_offsets["result"] = 344 + + /* + * If we ever need to support 32bit powerpc, we can + * get to the register offsets by using just a + * reg32_offset = _reg_offsets["reg"]/2 + * or somesuch + */ + _stp_regs_registered = 1 +} + +function probing_32bit_app() %{ /* pure */ + THIS->__retvalue = _stp_probing_32bit_app(CONTEXT->regs); +%} + +function _stp_get_register_by_offset:long (offset:long) %{ /* pure */ + long value; + if (!CONTEXT->regs) { + CONTEXT->last_error = "No registers available in this context"; + return; + } + if (THIS->offset < 0 || THIS->offset > sizeof(struct pt_regs) - sizeof(long)) { + snprintf(CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), + "Bad register offset: %lld", THIS->offset); + CONTEXT->last_error = CONTEXT->error_buffer; + return; + } + memcpy(&value, ((char *)CONTEXT->regs) + THIS->offset, sizeof(value)); + THIS->__retvalue = value; +%} + +function _stp_sign_extend32:long (value:long) { + if (value & 0x80000000) + value |= (0xffffffff << 32) + return value +} + +function _stp_register:long (name:string, sign_extend:long) { + if (!registers_valid()) { + error("cannot access CPU registers in this context") + return 0 + } + if (!_stp_regs_registered) + _stp_register_regs() + offset = _reg_offsets[name] + if (offset == 0 && !(name in _reg_offsets)) { + error("Unknown register: " . name) + return 0 + } + value = _stp_get_register_by_offset(offset) + if (probing_32bit_app()) { + if (sign_extend) + value = _stp_sign_extend32(value) + else + value &= 0xffffffff + } + return value +} + +/* Return the named register value as a signed value. */ +function register:long (name:string) { + return _stp_register(name, 1) +} + +/* + * Return the named register value as an unsigned value. Specifically, + * don't sign-extend the register value when promoting it to 64 bits. + */ +function u_register:long (name:string) { + return _stp_register(name, 0) +} + +/* + * Return the value of function arg #argnum (1=first arg). + * If truncate=1, mask off the top 32 bits. + * If sign_extend=1 and (truncate=1 or the probepoint we've hit is in a + * 32-bit app), sign-extend the 32-bit value. + */ +function _stp_arg:long (argnum:long, sign_extend:long, truncate:long) { + val = 0 + if (argnum < 1 || argnum > 8) { + error(sprintf("Cannot access arg(%d)", argnum)) + return 0 + } + + if (argnum == 1) + val = u_register("r3") + else if (argnum == 2) + val = u_register("r4") + else if (argnum == 3) + val = u_register("r5") + else if (argnum == 4) + val = u_register("r6") + else if (argnum == 5) + val = u_register("r7") + else if (argnum == 6) + val = u_register("r8") + else if (argnum == 7) + val = u_register("r9") + else (argnum == 8) + val = u_register("r10") + + if (truncate) { + if (sign_extend) + val = _stp_sign_extend32(val) + else + /* High bits may be garbage. */ + val = (val & 0xffffffff); + } + return val; +} + +/* Return the value of function arg #argnum (1=first arg) as a signed int. */ +function int_arg:long (argnum:long) { + return _stp_arg(argnum, 1, 1) +} + +/* Return the value of function arg #argnum (1=first arg) as an unsigned int. */ +function uint_arg:long (argnum:long) { + return _stp_arg(argnum, 0, 1) +} + +function long_arg:long (argnum:long) { + return _stp_arg(argnum, 1, 0) +} + +function ulong_arg:long (argnum:long) { + return _stp_arg(argnum, 0, 0) +} + +function longlong_arg:long (argnum:long) { + if (probing_32bit_app()) { + lowbits = _stp_arg(argnum, 0, 1) + highbits = _stp_arg(argnum+1, 0, 1) + return ((highbits << 32) | lowbits) + } else + return _stp_arg(argnum, 0, 0) +} + +function ulonglong_arg:long (argnum:long) { + return longlong_arg(argnum) +} + +function pointer_arg:long (argnum:long) { + return _stp_arg(argnum, 0, 0) +} + +function s32_arg:long (argnum:long) { + return int_arg(argnum) +} + +function u32_arg:long (argnum:long) { + return uint_arg(argnum) +} + +function s64_arg:long (argnum:long) { + return longlong_arg(argnum) +} + +function u64_arg:long (argnum:long) { + return ulonglong_arg(argnum) +} + +function asmlinkage() %{ /* pure */ %} + +function fastcall() %{ /* pure */ %} + +function regparm() %{ + snprintf(CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), + "regparm is invalid on powerpc."); + CONTEXT->last_error = CONTEXT->error_buffer; +%} diff --git a/tapset/powerpc/syscalls.stp b/tapset/powerpc/syscalls.stp new file mode 100644 index 00000000..0518d486 --- /dev/null +++ b/tapset/powerpc/syscalls.stp @@ -0,0 +1,589 @@ +# PPC64-specific system calls + +# sys64_time ________________________________________ +# +# time_t sys64_time(time_t __user * tloc) +# +probe syscall.sys64_time = kernel.function("sys64_time") ? +{ + name = "sys64_time" + argstr = sprintf("%p", $tloc) +} +probe syscall.sys64_time.return = kernel.function("sys64_time").return ? +{ + name = "sys64_time" + retstr = returnstr(1) +} + +# ppc64_personality ________________________________________ +# +# long ppc64_personality(unsigned long personality) +# +probe syscall.ppc64_personality = kernel.function("ppc64_personality") +{ + name = "ppc64_personality" + persona = $personality + argstr = sprint($personality) +} +probe syscall.ppc64_personality.return = kernel.function("ppc64_personality").return +{ + name = "ppc64_personality" + retstr = returnstr(1) +} + +# ppc_rtas ________________________________________ +# +# int ppc_rtas(struct rtas_args __user *uargs) +# +probe syscall.ppc_rtas = kernel.function("ppc_rtas") ? +{ + name = "ppc_rtas" + uargs_uaddr = $uargs + argstr = sprintf("%p", $uargs) +} +probe syscall.ppc_rtas.return = kernel.function("ppc_rtas").return ? +{ + name = "ppc_rtas" + retstr = returnstr(1) +} + +# ppc64_sys32_stime ________________________________________ +# +# long ppc64_sys32_stime(int __user * tptr) +# +probe syscall.ppc64_sys32_stime = kernel.function("ppc64_sys32_stime") ? +{ + name = "ppc64_sys32_stime" + t_uaddr = $tptr + argstr = sprintf("%p", $tptr) +} +probe syscall.ppc64_sys32_stime.return = kernel.function("ppc64_sys32_stime").return ? +{ + name = "ppc64_sys32_stime" + retstr = returnstr(1) +} + +# sys32_ptrace ________________________________________ +# (obsolete) +# int sys32_ptrace(long request, long pid, unsigned long addr, +# unsigned long data) +# +probe syscall.sys32_ptrace = kernel.function("sys32_ptrace") ? +{ + name = "sys32_ptrace" + request = $request + pid = $pid + addr = $addr + data = $data + argstr = sprintf("%p, %p, %p, %p", $request, $pid, $addr, $data) +} +probe syscall.sys32_ptrace.return = kernel.function("sys32_ptrace").return ? +{ + name = "sys32_ptrace" + retstr = returnstr(1) +} + +# sys32_sysinfo ________________________________________ +# +# (obsolete) long sys32_sysinfo(struct sysinfo32 __user *info) +# +probe syscall.sys32_sysinfo = kernel.function("sys32_sysinfo") ? +{ + name = "sys32_sysinfo" + info_uaddr = $info + argstr = sprintf("%p", info_uaddr) +} +probe syscall.sys32_sysinfo.return = kernel.function("sys32_sysinfo").return ? +{ + name = "sys32_sysinfo" + retstr = returnstr(1) +} + +# ipc ________________________________________ +# +# long sys32_ipc(u32 call, u32 first, u32 second, u32 third, +# compat_uptr_t ptr, u32 fifth) +# +probe syscall.ipc = kernel.function("sys32_ipc") ? +{ + name = "ipc" + argstr = sprintf("%d, %d, %d, %d, %p, %d", $call, $first, $second, + $third, $ptr, $fifth) +} +probe syscall.ipc.return = kernel.function("sys32_ipc").return ? +{ + name = "sys_ipc" + retstr = returnstr(1) +} + +# sys32_sigreturn ________________________________________ +# +# long sys32_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, +# struct pt_regs *regs) +# +probe syscall.sys32_sigreturn = kernel.function("sys32_sigreturn") ? +{ + name = "sys32_sigreturn" + r3 = $r3 + r4 = $r4 + r5 = $r5 + r6 = $r6 + r7 = $r7 + r8 = $r8 + argstr = sprintf("%p, %p, %p, %p, %p, %p", + $r3, $r4, $r5, $r6, $r7, $r8) +} +probe syscall.sys32_sigreturn.return = kernel.function("sys32_sigreturn").return ? +{ + name = "sys32_sigreturn" + retstr = returnstr(1) +} +# sys32_adjtimex ________________________________________ +# +# long sys32_adjtimex(struct timex32 __user *utp) +# +probe syscall.sys32_adjtimex = kernel.function("sys32_adjtimex") ? +{ + name = "sys32_adjtimex" + argstr = sprintf("%p", $utp) +} +probe syscall.sys32_adjtimex.return = kernel.function("sys32_adjtimex").return ? +{ + name = "sys32_adjtimex" + retstr = returnstr(1) +} + +# sys32_getdents ________________________________________ +# +# asmlinkage long sys32_getdents(unsigned int fd, +# struct linux_dirent32 __user *dirent, +# unsigned int count) +# +probe syscall.sys32_getdents = kernel.function("sys32_getdents") ? +{ + name = "sys32_getdents" + fd = $fd + dirp_uaddr = $dirent + count = $count + argstr = sprintf("%d, %p, %d", fd, dirp_uaddr, count) +} +probe syscall.sys32_getdents.return = kernel.function("sys32_getdents").return ? +{ + name = "sys32_getdents" + retstr = returnstr(1) +} + +# compat_sys_sysctl ________________________________________ +# +# long compat_sys_sysctl(struct __sysctl_args32 __user *args) +# +probe syscall.compat_sysctl = kernel.function("compat_sys_sysctl") ? +{ + name = "sysctl" + argstr = sprintf("%p", $args) +} +probe syscall.compat_sysctl.return = kernel.function("compat_sys_sysctl").return ? +{ + name = "sysctl" + retstr = returnstr(1) +} + +# sys32_sched_setparam ________________________________________ +# +# asmlinkage long sys32_sched_setparam(u32 pid, +# struct sched_param __user *param) +# +probe syscall.sys32_sched_setparam = kernel.function("sys32_sched_setparam") ? +{ + name = "sys32_sched_setparam" + pid = $pid + param_uaddr = $param + argstr = sprintf("%d, %p", pid, param_uaddr) +} +probe syscall.sys32_sched_setparam.return = kernel.function("sys32_sched_setparam").return ? +{ + name = "sys32_sched_setparam" + retstr = returnstr(1) +} + +# sys32_sched_rr_get_interval ________________________________________ +# +# asmlinkage long sys32_sched_rr_get_interval(u32 pid, +# struct compat_timespec __user *interval) +# +probe syscall.sys32_sched_rr_get_interval = kernel.function("sys32_sched_rr_get_interval") ? +{ + name = "sys32_sched_rr_get_interval" + pid = $pid + interval_uaddr = $interval + argstr = sprintf("%d, %p", pid, interval_uaddr) +} +probe syscall.sys32_sched_rr_get_interval.return = kernel.function("sys32_sched_rr_get_interval").return ? +{ + name = "sys32_sched_rr_get_interval" + retstr = returnstr(1) +} + +# sys32_rt_sigpending ________________________________________ +# +# long sys32_rt_sigpending(compat_sigset_t __user *set, +# compat_size_t sigsetsize) +# +probe syscall.sys32_rt_sigpending = kernel.function("sys32_rt_sigpending") ? +{ + name = "sys32_rt_sigpending" + set_uaddr = $set + sigsetsize = $sigsetsize + argstr = sprintf("%p, %d", set_uaddr, $sigsetsize) +} +probe syscall.sys32_rt_sigpending.return = kernel.function("sys32_rt_sigpending").return ? +{ + name = "sys32_rt_sigpending" + retstr = returnstr(1) +} +# sys32_rt_sigtimedwait ________________________________________ +# +# long sys32_rt_sigtimedwait(compat_sigset_t __user *uthese, +# compat_siginfo_t __user *uinfo, +# struct compat_timespec __user *uts, +# compat_size_t sigsetsize) +# +probe syscall.sys32_rt_sigtimedwait = kernel.function("sys32_rt_sigtimedwait") ? +{ + name = "sys32_rt_sigtimedwait" + uthese_uaddr = $uthese + uinfo_uaddr = $uinfo + uts_uaddr = $uts + sigsetsize = $sigsetsize + argstr = sprintf("%p, %p, %p, %p", uthese_uaddr, + uinfo_uaddr, uts_uaddr, sigsetsize) +} +probe syscall.sys32_rt_sigtimedwait.return = kernel.function("sys32_rt_sigtimedwait").return ? +{ + name = "sys32_rt_sigtimedwait" + retstr = returnstr(1) +} +# sys32_rt_sigqueueinfo ________________________________________ +# +# long sys32_rt_sigqueueinfo(u32 pid, u32 sig, compat_siginfo_t __user *uinfo) +# +probe syscall.sys32_rt_sigqueueinfo = kernel.function("sys32_rt_sigqueueinfo") ? +{ + name = "sys32_rt_sigqueueinfo" + pid = $pid + sig = $sig + uinfo_uaddr = $uinfo + argstr = sprintf("%p, %s, %p", pid, _signal_name($sig), + uinfo_uaddr) +} +probe syscall.sys32_rt_sigqueueinfo.return = kernel.function("sys32_rt_sigqueueinfo").return ? +{ + name = "sys32_rt_sigqueueinfo" + retstr = returnstr(1) +} +# sys32_sigaltstack ________________________________________ +# +# int sys32_sigaltstack(u32 __new, u32 __old, int r5, +# int r6, int r7, int r8, struct pt_regs *regs) +# +probe syscall.sys32_sigaltstack = kernel.function("sys32_sigaltstack") ? +{ + name = "sys32_sigaltstack" + argstr = "FIXME" +} +probe syscall.sys32_sigaltstack.return = kernel.function("sys32_sigaltstack").return ? +{ + name = "sys32_sigaltstack" + retstr = returnstr(1) +} +# sys32_sendfile64 ________________________________________ +# +# asmlinkage int sys32_sendfile64(int out_fd, int in_fd, +# compat_loff_t __user *offset, s32 count) +# +probe syscall.sys32_sendfile64 = kernel.function("sys32_sendfile64") ? +{ + name = "sys32_sendfile64" + out_fd = $out_fd + in_fd = $in_fd + offset_uaddr = $offset + count = $count + argstr = sprintf("%d, %d, %p, %d", $out_fd, $in_fd, offset_uaddr, + $count) +} +probe syscall.sys32_sendfile64.return = kernel.function("sys32_sendfile64").return ? +{ + name = "sys32_sendfile64" + retstr = returnstr(1) +} +# ppc32_timer_create ________________________________________ +# +# long ppc32_timer_create(clockid_t clock, +# struct compat_sigevent __user *ev32, +# timer_t __user *timer_id) +# +probe syscall.ppc32_timer_create = kernel.function("ppc32_timer_create") ? +{ + name = "ppc32_timer_create" + which_clock = $clock + timer_event_spec = $ev32 + created_timer_id = $timer_id + argstr = sprintf("%d, %p, %p", which_clock, timer_event_spec, + created_timer_id) +} +probe syscall.ppc32_timer_create.return = kernel.function("ppc32_timer_create").return ? +{ + name = "ppc32_timer_create" + retstr = returnstr(1) +} +# compat_timer_settime ________________________________________ +# +# long compat_timer_settime(timer_t timer_id, int flags, +# struct compat_itimerspec __user *new, +# struct compat_itimerspec __user *old) +# +probe syscall.compat_timer_settime = kernel.function("compat_timer_settime") ? +{ + name = "compat_timer_settime" + timer_id = $timer_id + flags = $flags + new_setting_uaddr = $new + old_setting_uaddr = $old + argstr = sprintf("%d, %d, %p, %p", timer_id, flags, + new_setting_uaddr, old_setting_uaddr) +} +probe syscall.compat_timer_settime.return = kernel.function("compat_timer_settime").return ? +{ + name = "compat_timer_settime" + retstr = returnstr(1) +} +# compat_timer_gettime ________________________________________ +# +# long compat_timer_gettime(timer_t timer_id, +# struct compat_itimerspec __user *setting) +# +probe syscall.compat_timer_gettime = kernel.function("compat_timer_gettime") ? +{ + name = "compat_timer_gettime" + timer_id = $timer_id + setting_uaddr = $setting + argstr = sprintf("%d, %p", timer_id, setting_uaddr) +} +probe syscall.compat_timer_gettime.return = kernel.function("compat_timer_gettime").return ? +{ + name = "compat_timer_gettime" + retstr = returnstr(1) +} +# compat_clock_settime ________________________________________ +# +# long compat_clock_settime(clockid_t which_clock, +# struct compat_timespec __user *tp) +# +probe syscall.compat_clock_settime = kernel.function("compat_clock_settime") ? +{ + name = "compat_clock_settime" + which_clock = $which_clock + tp_uaddr = $tp + argstr = sprintf("%d, %p", which_clock, tp_uaddr) +} +probe syscall.compat_clock_settime.return = kernel.function("compat_clock_settime").return ? +{ + name = "compat_clock_settime" + retstr = returnstr(1) +} +# sys32_swapcontext ________________________________________ +# +# long sys32_swapcontext(struct ucontext32 __user *old_ctx, +# struct ucontext32 __user *new_ctx, +# int ctx_size, int r6, int r7, int r8, +# struct pt_regs *regs) +# +probe syscall.sys32_swapcontext = kernel.function("sys32_swapcontext") ? +{ + name = "sys32_swapcontext" + old_ctx_uaddr = $old_ctx + new_ctx_uaddr = $new_ctx + r5 = $ctx_size + r6 = $r6 + r7 = $r7 + r8 = $r8 + regs = $regs + argstr = sprintf("%p, %p, %d, %d, %d, %d, %p", + old_ctx_uaddr, new_ctx_uaddr, r5, r6, r7, r8, regs) +} +probe syscall.sys32_swapcontext.return = kernel.function("sys32_swapcontext").return ? +{ + name = "sys32_swapcontext" + retstr = returnstr(1) +} +# sys32_utimes ________________________________________ +# +# asmlinkage long sys32_utimes(char __user *filename, +# struct compat_timeval __user *tvs) +# +probe syscall.sys32_utimes = kernel.function("sys32_utimes") ? +{ + name = "sys32_utimes" + filename_uaddr = $filename + path = user_string($filename) + tvp_uaddr = $tvs + argstr = sprintf("%s, %p", user_string_quoted($filename), tvp_uaddr) +} +probe syscall.sys32_utimes.return = kernel.function("sys32_utimes").return ? +{ + name = "sys32_utimes" + retstr = returnstr(1) +} +# compat_mbind ________________________________________ +# +# asmlinkage long compat_mbind(compat_ulong_t start, compat_ulong_t len, +# compat_ulong_t mode, compat_ulong_t __user *nmask, +# compat_ulong_t maxnode, compat_ulong_t flags) +# +probe syscall.compat_mbind = kernel.function("compat_mbind") ? +{ + name = "compat_mbind" + start_uaddr = $start + len = $len + policy = $mode + nodemask_uaddr = $nmask + maxnode = $maxnode + flags = $flags + argstr = sprintf("%p, %d, %d, %p, %d, %d", start_uaddr, len, + policy, nodemask_uaddr, maxnode, flags) +} +probe syscall.compat_mbind.return = kernel.function("compat_mbind").return ? +{ + name = "compat_mbind" + retstr = returnstr(1) +} +# compat_get_mempolicy ________________________________________ +# +# asmlinkage long compat_get_mempolicy(int __user *policy, +# compat_ulong_t __user *nmask, +# compat_ulong_t maxnode, +# compat_ulong_t addr, compat_ulong_t flags) +# +probe syscall.compat_get_mempolicy = kernel.function("compat_get_mempolicy") ? +{ + name = "compat_get_mempolicy" + policy_uaddr = $policy + nmask_uaddr = $nmask + maxnode = $maxnode + addr = $addr + flags = $flags + argstr = sprintf("%p, %p, %d, %d", policy_uaddr, nmask_uaddr, + maxnode, addr) +} +probe syscall.compat_get_mempolicy.return = kernel.function("compat_get_mempolicy").return ? +{ + name = "compat_get_mempolicy" + retstr = returnstr(1) +} +# compat_set_mempolicy ________________________________________ +# +# asmlinkage long compat_set_mempolicy(int mode, compat_ulong_t __user *nmask, +# compat_ulong_t maxnode) +# +probe syscall.compat_set_mempolicy = kernel.function("compat_set_mempolicy") ? +{ + name = "compat_set_mempolicy" + policy = $mode + nodemask_uaddr = $nmask + maxnode = $maxnode + argstr = sprintf("%d, %p, %d", policy, nodemask_uaddr, maxnode) +} +probe syscall.compat_set_mempolicy.return = kernel.function("compat_set_mempolicy").return ? +{ + name = "compat_set_mempolicy" + retstr = returnstr(1) +} + +# mmap +# long sys_mmap(unsigned long addr, size_t len, +# unsigned long prot, unsigned long flags, +# unsigned long fd, off_t offset) +# +probe syscall.mmap = kernel.function("sys_mmap") ? +{ + name = "mmap" + start = $addr + len = $len + prot = $prot + flags = $flags + fd = $fd + offset = $offset + argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, $len, + _mprotect_prot_str($prot), _mmap_flags($flags), $fd, $offset) +} + +probe syscall.mmap.return = kernel.function("sys_mmap").return ? +{ + name = "mmap" + retstr = returnstr(2) +} + +# mmap2 +# long sys_mmap2(unsigned long addr, size_t len, +# unsigned long prot, unsigned long flags, +# unsigned long fd, unsigned long pgoff) +# long compat_sys_mmap2(unsigned long addr, size_t len, +# unsigned long prot, unsigned long flags, +# unsigned long fd, unsigned long pgoff) +# +probe syscall.mmap2 = kernel.function("sys_mmap2") ?, + kernel.function("compat_sys_mmap2") ? +{ + name = "mmap2" + start = $addr + length = $len + prot = $prot + flags = $flags + fd = $fd + pgoffset = $pgoff + argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, + $len, _mprotect_prot_str($prot), _mmap_flags($flags), + $fd, $pgoff) +} +probe syscall.mmap2.return = kernel.function("sys_mmap2").return ?, + kernel.function("compat_sys_mmap2").return ? +{ + name = "mmap2" + retstr = returnstr(2) +} + +# ppc64_sys_stime ________________________________________ +# +# long ppc64_sys_stime(long __user * tptr) +# +probe syscall.ppc64_sys_stime = kernel.function("ppc64_sys_stime") ? +{ + name = "ppc64_sys_stime" + /* FIXME */ + t_uaddr = $tptr + argstr = sprintf("%p", t_uaddr) +} +probe syscall.ppc64_sys_stime.return = kernel.function("ppc64_sys_stime").return ? +{ + name = "ppc64_sys_stime" + retstr = returnstr(1) +} +# ppc64_newuname ________________________________________ +# +# asmlinkage int ppc64_newuname(struct new_utsname __user * name) +# +probe syscall.ppc64_newuname = kernel.function("ppc64_newuname") ? +{ + name = "ppc64_newuname" + name_uaddr = $name + argstr = sprintf("%p", name_uaddr) +} +probe syscall.ppc64_newuname.return = kernel.function("ppc64_newuname").return ? +{ + name = "ppc64_newuname" + retstr = returnstr(1) +} + +# +# + diff --git a/tapset/ppc64/nd_syscalls.stp b/tapset/ppc64/nd_syscalls.stp deleted file mode 100644 index 46267507..00000000 --- a/tapset/ppc64/nd_syscalls.stp +++ /dev/null @@ -1,738 +0,0 @@ -# PPC64-specific system calls - -# sys64_time ________________________________________ -# -# time_t sys64_time(time_t __user * tloc) -# -probe nd_syscall.sys64_time = kprobe.function("sys64_time") ? -{ - name = "sys64_time" - // argstr = sprintf("%p", $tloc) - asmlinkage() - argstr = sprintf("%p", pointer_arg(1)) -} -probe nd_syscall.sys64_time.return = kprobe.function("sys64_time").return ? -{ - name = "sys64_time" - retstr = returnstr(1) -} - -# ppc64_personality ________________________________________ -# -# long ppc64_personality(unsigned long personality) -# -probe nd_syscall.ppc64_personality = kprobe.function("ppc64_personality") -{ - name = "ppc64_personality" - // persona = $personality - // argstr = sprint($personality) - asmlinkage() - persona = ulong_arg(1) - argstr = sprint(persona) -} -probe nd_syscall.ppc64_personality.return = kprobe.function("ppc64_personality").return -{ - name = "ppc64_personality" - retstr = returnstr(1) -} - -# ppc_rtas ________________________________________ -# -# int ppc_rtas(struct rtas_args __user *uargs) -# -probe nd_syscall.ppc_rtas = kprobe.function("ppc_rtas") ? -{ - name = "ppc_rtas" - // uargs_uaddr = $uargs - // argstr = sprintf("%p", $uargs) - asmlinkage() - uargs_uaddr = pointer_arg(1) - argstr = sprintf("%p", uargs_uaddr) -} -probe nd_syscall.ppc_rtas.return = kprobe.function("ppc_rtas").return ? -{ - name = "ppc_rtas" - retstr = returnstr(1) -} - -# ppc64_sys32_stime ________________________________________ -# -# long ppc64_sys32_stime(int __user * tptr) -# -probe nd_syscall.ppc64_sys32_stime = kprobe.function("ppc64_sys32_stime") ? -{ - name = "ppc64_sys32_stime" - // t_uaddr = $tptr - // argstr = sprintf("%p", $tptr) - asmlinkage() - t_uaddr = pointer_arg(1) - argstr = sprintf("%p", t_uaddr) -} -probe nd_syscall.ppc64_sys32_stime.return = kprobe.function("ppc64_sys32_stime").return ? -{ - name = "ppc64_sys32_stime" - retstr = returnstr(1) -} - -# sys32_ptrace ________________________________________ -# (obsolete) -# int sys32_ptrace(long request, long pid, unsigned long addr, -# unsigned long data) -# -probe nd_syscall.sys32_ptrace = kprobe.function("sys32_ptrace") ? -{ - name = "sys32_ptrace" - // request = $request - // pid = $pid - // addr = $addr - // data = $data - // argstr = sprintf("%p, %p, %p, %p", $request, $pid, $addr, $data) - asmlinkage() - request = long_arg(1) - pid = long_arg(2) - addr = ulong_arg(3) - data = ulong_arg(4) - argstr = sprintf("%p, %p, %p, %p", request, pid, addr, data) -} -probe nd_syscall.sys32_ptrace.return = kprobe.function("sys32_ptrace").return ? -{ - name = "sys32_ptrace" - retstr = returnstr(1) -} - -# sys32_sysinfo ________________________________________ -# -# (obsolete) long sys32_sysinfo(struct sysinfo32 __user *info) -# -probe nd_syscall.sys32_sysinfo = kprobe.function("sys32_sysinfo") ? -{ - name = "sys32_sysinfo" - // info_uaddr = $info - asmlinkage() - info_uaddr = pointer_arg(1) - argstr = sprintf("%p", info_uaddr) -} -probe nd_syscall.sys32_sysinfo.return = kprobe.function("sys32_sysinfo").return ? -{ - name = "sys32_sysinfo" - retstr = returnstr(1) -} - -# ipc ________________________________________ -# -# long sys32_ipc(u32 call, u32 first, u32 second, u32 third, -# compat_uptr_t ptr, u32 fifth) -# -probe nd_syscall.ipc = kprobe.function("sys32_ipc") ? -{ - name = "ipc" - // argstr = sprintf("%d, %d, %d, %d, %p, %d", $call, $first, $second, - // $third, $ptr, $fifth) - asmlinkage() - argstr = sprintf("%d, %d, %d, %d, %p, %d", uint_arg(1), uint_arg(2), uint_arg(3), - uint_arg(4), uint_arg(5), uint_arg(6)) -} -probe nd_syscall.ipc.return = kprobe.function("sys32_ipc").return ? -{ - name = "sys_ipc" - retstr = returnstr(1) -} - -# sys32_sigreturn ________________________________________ -# -# long sys32_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, -# struct pt_regs *regs) -# -probe nd_syscall.sys32_sigreturn = kprobe.function("sys32_sigreturn") ? -{ - name = "sys32_sigreturn" - // r3 = $r3 - // r4 = $r4 - // // r5 = $r5 - // r6 = $r6 - // r7 = $r7 - // r8 = $r8 - // argstr = sprintf("%p, %p, %p, %p, %p, %p", - // $r3, $r4, $r5, $r6, $r7, $r8) - asmlinkage() - r3 = int_arg(1) - r4 = int_arg(2) - r5 = int_arg(3) - r6 = int_arg(4) - r7 = int_arg(5) - r8 = int_arg(6) - argstr = sprintf("%p, %p, %p, %p, %p, %p", - r3, r4, r5, r6, r7, r8) -} -probe nd_syscall.sys32_sigreturn.return = kprobe.function("sys32_sigreturn").return ? -{ - name = "sys32_sigreturn" - retstr = returnstr(1) -} - -# sys32_adjtimex ________________________________________ -# -# long sys32_adjtimex(struct timex32 __user *utp) -# -probe nd_syscall.sys32_adjtimex = kprobe.function("sys32_adjtimex") ? -{ - name = "sys32_adjtimex" - // argstr = sprintf("%p", $utp) - asmlinkage() - argstr = sprintf("%p", pointer_arg(1)) -} -probe nd_syscall.sys32_adjtimex.return = kprobe.function("sys32_adjtimex").return ? -{ - name = "sys32_adjtimex" - retstr = returnstr(1) -} - -# sys32_getdents ________________________________________ -# -# asmlinkage long sys32_getdents(unsigned int fd, -# struct linux_dirent32 __user *dirent, -# unsigned int count) -# -probe nd_syscall.sys32_getdents = kprobe.function("sys32_getdents") ? -{ - name = "sys32_getdents" - // fd = $fd - // dirp_uaddr = $dirent - // count = $count - asmlinkage() - fd = uint_arg(1) - dirp_uaddr = pointer_arg(2) - count = uint_arg(3) - argstr = sprintf("%d, %p, %d", fd, dirp_uaddr, count) -} -probe nd_syscall.sys32_getdents.return = kprobe.function("sys32_getdents").return ? -{ - name = "sys32_getdents" - retstr = returnstr(1) -} - -# compat_sys_sysctl ________________________________________ -# -# long compat_sys_sysctl(struct __sysctl_args32 __user *args) -# -probe nd_syscall.compat_sysctl = kprobe.function("compat_sys_sysctl") ? -{ - name = "sysctl" - // argstr = sprintf("%p", $args) - asmlinkage() - argstr = sprintf("%p", pointer_arg(1)) -} -probe nd_syscall.compat_sysctl.return = kprobe.function("compat_sys_sysctl").return ? -{ - name = "sysctl" - retstr = returnstr(1) -} - -# sys32_sched_setparam ________________________________________ -# -# asmlinkage long sys32_sched_setparam(u32 pid, -# struct sched_param __user *param) -# -probe nd_syscall.sys32_sched_setparam = kprobe.function("sys32_sched_setparam") ? -{ - name = "sys32_sched_setparam" - // pid = $pid - // param_uaddr = $param - asmlinkage() - pid = uint_arg(1) - param_uaddr = pointer_arg(2) - argstr = sprintf("%d, %p", pid, param_uaddr) -} -probe nd_syscall.sys32_sched_setparam.return = kprobe.function("sys32_sched_setparam").return ? -{ - name = "sys32_sched_setparam" - retstr = returnstr(1) -} - -# sys32_sched_rr_get_interval ________________________________________ -# -# asmlinkage long sys32_sched_rr_get_interval(u32 pid, -# struct compat_timespec __user *interval) -# -probe nd_syscall.sys32_sched_rr_get_interval = kprobe.function("sys32_sched_rr_get_interval") ? -{ - name = "sys32_sched_rr_get_interval" - // pid = $pid - // interval_uaddr = $interval - asmlinkage() - pid = uint_arg(1) - interval_uaddr = pointer_arg(2) - argstr = sprintf("%d, %p", pid, interval_uaddr) -} -probe nd_syscall.sys32_sched_rr_get_interval.return = kprobe.function("sys32_sched_rr_get_interval").return ? -{ - name = "sys32_sched_rr_get_interval" - retstr = returnstr(1) -} - -# sys32_rt_sigpending ________________________________________ -# -# long sys32_rt_sigpending(compat_sigset_t __user *set, -# compat_size_t sigsetsize) -# -probe nd_syscall.sys32_rt_sigpending = kprobe.function("sys32_rt_sigpending") ? -{ - name = "sys32_rt_sigpending" - // set_uaddr = $set - // sigsetsize = $sigsetsize - // argstr = sprintf("%p, %d", set_uaddr, $sigsetsize) - asmlinkage() - set_uaddr = pointer_arg(1) - sigsetsize = uint_arg(2) - argstr = sprintf("%p, %d", set_uaddr, sigsetsize) -} -probe nd_syscall.sys32_rt_sigpending.return = kprobe.function("sys32_rt_sigpending").return ? -{ - name = "sys32_rt_sigpending" - retstr = returnstr(1) -} - -# sys32_rt_sigtimedwait ________________________________________ -# -# long sys32_rt_sigtimedwait(compat_sigset_t __user *uthese, -# compat_siginfo_t __user *uinfo, -# struct compat_timespec __user *uts, -# compat_size_t sigsetsize) -# -probe nd_syscall.sys32_rt_sigtimedwait = kprobe.function("sys32_rt_sigtimedwait") ? -{ - name = "sys32_rt_sigtimedwait" - // uthese_uaddr = $uthese - // uinfo_uaddr = $uinfo - // uts_uaddr = $uts - // sigsetsize = $sigsetsize - asmlinkage() - uthese_uaddr = pointer_arg(1) - uinfo_uaddr = pointer_arg(2) - uts_uaddr = pointer_arg(3) - sigsetsize = uint_arg(4) - argstr = sprintf("%p, %p, %p, %p", uthese_uaddr, - uinfo_uaddr, uts_uaddr, sigsetsize) -} -probe nd_syscall.sys32_rt_sigtimedwait.return = kprobe.function("sys32_rt_sigtimedwait").return ? -{ - name = "sys32_rt_sigtimedwait" - retstr = returnstr(1) -} - -# sys32_rt_sigqueueinfo ________________________________________ -# -# long sys32_rt_sigqueueinfo(u32 pid, u32 sig, compat_siginfo_t __user *uinfo) -# -probe nd_syscall.sys32_rt_sigqueueinfo = kprobe.function("sys32_rt_sigqueueinfo") ? -{ - name = "sys32_rt_sigqueueinfo" - // pid = $pid - // sig = $sig - // uinfo_uaddr = $uinfo - // argstr = sprintf("%p, %s, %p", pid, _signal_name($sig), - // uinfo_uaddr) - asmlinkage() - pid = uint_arg(1) - sig = uint_arg(2) - uinfo_uaddr = pointer_arg(3) - argstr = sprintf("%p, %s, %p", pid, _signal_name(sig), - uinfo_uaddr) -} -probe nd_syscall.sys32_rt_sigqueueinfo.return = kprobe.function("sys32_rt_sigqueueinfo").return ? -{ - name = "sys32_rt_sigqueueinfo" - retstr = returnstr(1) -} - -# sys32_sigaltstack ________________________________________ -# -# int sys32_sigaltstack(u32 __new, u32 __old, int r5, -# int r6, int r7, int r8, struct pt_regs *regs) -# -probe nd_syscall.sys32_sigaltstack = kprobe.function("sys32_sigaltstack") ? -{ - name = "sys32_sigaltstack" - argstr = "FIXME" -} -probe nd_syscall.sys32_sigaltstack.return = kprobe.function("sys32_sigaltstack").return ? -{ - name = "sys32_sigaltstack" - retstr = returnstr(1) -} - -# sys32_sendfile64 ________________________________________ -# -# asmlinkage int sys32_sendfile64(int out_fd, int in_fd, -# compat_loff_t __user *offset, s32 count) -# -probe nd_syscall.sys32_sendfile64 = kprobe.function("sys32_sendfile64") ? -{ - name = "sys32_sendfile64" - // out_fd = $out_fd - // in_fd = $in_fd - // offset_uaddr = $offset - // count = $count - // argstr = sprintf("%d, %d, %p, %d", $out_fd, $in_fd, offset_uaddr, - // $count) - asmlinkage() - out_fd = int_arg(1) - in_fd = int_arg(2) - offset_uaddr = long_arg(3) - count = int_arg(4) - argstr = sprintf("%d, %d, %p, %d", out_fd, in_fd, offset_uaddr, - count) -} -probe nd_syscall.sys32_sendfile64.return = kprobe.function("sys32_sendfile64").return ? -{ - name = "sys32_sendfile64" - retstr = returnstr(1) -} - -# ppc32_timer_create ________________________________________ -# -# long ppc32_timer_create(clockid_t clock, -# struct compat_sigevent __user *ev32, -# timer_t __user *timer_id) -# -probe nd_syscall.ppc32_timer_create = kprobe.function("ppc32_timer_create") ? -{ - name = "ppc32_timer_create" - // which_clock = $clock - // timer_event_spec = $ev32 - // created_timer_id = $timer_id - asmlinkage() - which_clock = int_arg(1) - timer_event_spec = pointer_arg(2) - created_timer_id = pointer_arg(3) - argstr = sprintf("%d, %p, %p", which_clock, timer_event_spec, - created_timer_id) -} -probe nd_syscall.ppc32_timer_create.return = kprobe.function("ppc32_timer_create").return ? -{ - name = "ppc32_timer_create" - retstr = returnstr(1) -} - -# compat_timer_settime ________________________________________ -# -# long compat_timer_settime(timer_t timer_id, int flags, -# struct compat_itimerspec __user *new, -# struct compat_itimerspec __user *old) -# -probe nd_syscall.compat_timer_settime = kprobe.function("compat_timer_settime") ? -{ - name = "compat_timer_settime" - // timer_id = $timer_id - // flags = $flags - // new_setting_uaddr = $new - // old_setting_uaddr = $old - asmlinkage() - timer_id = int_arg(1) - flags = int_arg(2) - new_setting_uaddr = pointer_arg(3) - old_setting_uaddr = pointer_arg(4) - argstr = sprintf("%d, %d, %p, %p", timer_id, flags, - new_setting_uaddr, old_setting_uaddr) -} -probe nd_syscall.compat_timer_settime.return = kprobe.function("compat_timer_settime").return ? -{ - name = "compat_timer_settime" - retstr = returnstr(1) -} - -# compat_timer_gettime ________________________________________ -# -# long compat_timer_gettime(timer_t timer_id, -# struct compat_itimerspec __user *setting) -# -probe nd_syscall.compat_timer_gettime = kprobe.function("compat_timer_gettime") ? -{ - name = "compat_timer_gettime" - // timer_id = $timer_id - // setting_uaddr = $setting - asmlinkage() - timer_id = int_arg(1) - setting_uaddr = pointer_arg(2) - argstr = sprintf("%d, %p", timer_id, setting_uaddr) -} -probe nd_syscall.compat_timer_gettime.return = kprobe.function("compat_timer_gettime").return ? -{ - name = "compat_timer_gettime" - retstr = returnstr(1) -} - -# compat_clock_settime ________________________________________ -# -# long compat_clock_settime(clockid_t which_clock, -# struct compat_timespec __user *tp) -# -probe nd_syscall.compat_clock_settime = kprobe.function("compat_clock_settime") ? -{ - name = "compat_clock_settime" - // which_clock = $which_clock - // tp_uaddr = $tp - asmlinkage() - which_clock = int_arg(1) - tp_uaddr = pointer_arg(2) - argstr = sprintf("%d, %p", which_clock, tp_uaddr) -} -probe nd_syscall.compat_clock_settime.return = kprobe.function("compat_clock_settime").return ? -{ - name = "compat_clock_settime" - retstr = returnstr(1) -} - -# sys32_swapcontext ________________________________________ -# -# long sys32_swapcontext(struct ucontext32 __user *old_ctx, -# struct ucontext32 __user *new_ctx, -# int ctx_size, int r6, int r7, int r8, -# struct pt_regs *regs) -# -probe nd_syscall.sys32_swapcontext = kprobe.function("sys32_swapcontext") ? -{ - name = "sys32_swapcontext" - // old_ctx_uaddr = $old_ctx - // new_ctx_uaddr = $new_ctx - // r5 = $ctx_size - // r6 = $r6 - // r7 = $r7 - // r8 = $r8 - // regs = $regs - asmlinkage() - old_ctx_uaddr = pointer_arg(1) - new_ctx_uaddr = pointer_arg(2) - r5 = int_arg(3) - r6 = int_arg(4) - r7 = int_arg(5) - r8 = int_arg(6) - regs = pointer_arg(7) - argstr = sprintf("%p, %p, %d, %d, %d, %d, %p", - old_ctx_uaddr, new_ctx_uaddr, r5, r6, r7, r8, regs) -} -probe nd_syscall.sys32_swapcontext.return = kprobe.function("sys32_swapcontext").return ? -{ - name = "sys32_swapcontext" - retstr = returnstr(1) -} - -# sys32_utimes ________________________________________ -# -# asmlinkage long sys32_utimes(char __user *filename, -# struct compat_timeval __user *tvs) -# -probe nd_syscall.sys32_utimes = kprobe.function("sys32_utimes") ? -{ - name = "sys32_utimes" - // filename_uaddr = $filename - // path = user_string($filename) - // tvp_uaddr = $tvs - // argstr = sprintf("%s, %p", user_string_quoted($filename), tvp_uaddr) - asmlinkage() - filename_uaddr = pointer_arg(1) - path = user_string(filename_uaddr) - tvp_uaddr = pointer_arg(2) - argstr = sprintf("%s, %p", user_string_quoted(filename_uaddr), tvp_uaddr) -} -probe nd_syscall.sys32_utimes.return = kprobe.function("sys32_utimes").return ? -{ - name = "sys32_utimes" - retstr = returnstr(1) -} - -# compat_mbind ________________________________________ -# -# asmlinkage long compat_mbind(compat_ulong_t start, compat_ulong_t len, -# compat_ulong_t mode, compat_ulong_t __user *nmask, -# compat_ulong_t maxnode, compat_ulong_t flags) -# -probe nd_syscall.compat_mbind = kprobe.function("compat_mbind") ? -{ - name = "compat_mbind" - // start_uaddr = $start - // len = $len - // policy = $mode - // nodemask_uaddr = $nmask - // maxnode = $maxnode - // flags = $flags - asmlinkage() - start_uaddr = uint_arg(1) - len = uint_arg(2) - policy = uint_arg(3) - nodemask_uaddr = uint_arg(4) - maxnode = uint_arg(5) - flags = uint_arg(6) - argstr = sprintf("%p, %d, %d, %p, %d, %d", start_uaddr, len, - policy, nodemask_uaddr, maxnode, flags) -} -probe nd_syscall.compat_mbind.return = kprobe.function("compat_mbind").return ? -{ - name = "compat_mbind" - retstr = returnstr(1) -} - -# compat_get_mempolicy ________________________________________ -# -# asmlinkage long compat_get_mempolicy(int __user *policy, -# compat_ulong_t __user *nmask, -# compat_ulong_t maxnode, -# compat_ulong_t addr, compat_ulong_t flags) -# -probe nd_syscall.compat_get_mempolicy = kprobe.function("compat_get_mempolicy") ? -{ - name = "compat_get_mempolicy" - // policy_uaddr = $policy - // nmask_uaddr = $nmask - // maxnode = $maxnode - // addr = $addr - // flags = $flags - asmlinkage() - policy_uaddr = int_arg(1) - nmask_uaddr = uint_arg(2) - maxnode = uint_arg(3) - addr = uint_arg(4) - flags = uint_arg(5) - argstr = sprintf("%p, %p, %d, %d", policy_uaddr, nmask_uaddr, - maxnode, addr) -} -probe nd_syscall.compat_get_mempolicy.return = kprobe.function("compat_get_mempolicy").return ? -{ - name = "compat_get_mempolicy" - retstr = returnstr(1) -} - -# compat_set_mempolicy ________________________________________ -# -# asmlinkage long compat_set_mempolicy(int mode, compat_ulong_t __user *nmask, -# compat_ulong_t maxnode) -# -probe nd_syscall.compat_set_mempolicy = kprobe.function("compat_set_mempolicy") ? -{ - name = "compat_set_mempolicy" - // policy = $mode - // nodemask_uaddr = $nmask - // maxnode = $maxnode - asmlinkage() - policy = int_arg(1) - nodemask_uaddr = uint_arg(2) - maxnode = uint_arg(3) - argstr = sprintf("%d, %p, %d", policy, nodemask_uaddr, maxnode) -} -probe nd_syscall.compat_set_mempolicy.return = kprobe.function("compat_set_mempolicy").return ? -{ - name = "compat_set_mempolicy" - retstr = returnstr(1) -} - -# mmap -# long sys_mmap(unsigned long addr, size_t len, -# unsigned long prot, unsigned long flags, -# unsigned long fd, off_t offset) -# -probe nd_syscall.mmap = kprobe.function("sys_mmap") ? -{ - name = "mmap" - // start = $addr - // len = $len - // prot = $prot - // flags = $flags - // fd = $fd - // offset = $offset - // argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, $len, - // _mprotect_prot_str($prot), _mmap_flags($flags), $fd, $offset) - asmlinkage() - start = ulong_arg(1) - len = ulong_arg(2) - prot = ulong_arg(3) - flags = ulong_arg(4) - fd = ulong_arg(5) - offset = ulong_arg(6) - argstr = sprintf("%p, %d, %s, %s, %d, %d", start, len, - _mprotect_prot_str(prot), _mmap_flags(flags), fd, offset) -} -probe nd_syscall.mmap.return = kprobe.function("sys_mmap").return ? -{ - name = "mmap" - retstr = returnstr(2) -} - -# mmap2 -# long sys_mmap2(unsigned long addr, size_t len, -# unsigned long prot, unsigned long flags, -# unsigned long fd, unsigned long pgoff) -# long compat_sys_mmap2(unsigned long addr, size_t len, -# unsigned long prot, unsigned long flags, -# unsigned long fd, unsigned long pgoff) -# -probe nd_syscall.mmap2 = kprobe.function("sys_mmap2") ?, - kprobe.function("compat_sys_mmap2") ? -{ - name = "mmap2" - // start = $addr - // length = $len - // prot = $prot - // flags = $flags - // fd = $fd - // pgoffset = $pgoff - // argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, - // $len, _mprotect_prot_str($prot), _mmap_flags($flags), - // $fd, $pgoff) - asmlinkage() - start = ulong_arg(1) - length = ulong_arg(2) - prot = ulong_arg(3) - flags = ulong_arg(4) - fd = ulong_arg(5) - pgoffset = ulong_arg(6) - argstr = sprintf("%p, %d, %s, %s, %d, %d", start, - length, _mprotect_prot_str(prot), _mmap_flags(flags), - fd, pgoffset) -} -probe nd_syscall.mmap2.return = kprobe.function("sys_mmap2").return ?, - kprobe.function("compat_sys_mmap2").return ? -{ - name = "mmap2" - retstr = returnstr(2) -} - -# ppc64_sys_stime ________________________________________ -# -# long ppc64_sys_stime(long __user * tptr) -# -probe nd_syscall.ppc64_sys_stime = kprobe.function("ppc64_sys_stime") ? -{ - name = "ppc64_sys_stime" - /* FIXME */ - // t_uaddr = $tptr - asmlinkage() - t_uaddr = pointer_arg(1) - argstr = sprintf("%p", t_uaddr) -} -probe nd_syscall.ppc64_sys_stime.return = kprobe.function("ppc64_sys_stime").return ? -{ - name = "ppc64_sys_stime" - retstr = returnstr(1) -} - -# ppc64_newuname ________________________________________ -# -# asmlinkage int ppc64_newuname(struct new_utsname __user * name) -# -probe nd_syscall.ppc64_newuname = kprobe.function("ppc64_newuname") ? -{ - name = "ppc64_newuname" - // name_uaddr = $name - asmlinkage() - name_uaddr = pointer_arg(1) - argstr = sprintf("%p", name_uaddr) -} -probe nd_syscall.ppc64_newuname.return = kprobe.function("ppc64_newuname").return ? -{ - name = "ppc64_newuname" - retstr = returnstr(1) -} - -# -# - diff --git a/tapset/ppc64/registers.stp b/tapset/ppc64/registers.stp deleted file mode 100644 index c8713e5a..00000000 --- a/tapset/ppc64/registers.stp +++ /dev/null @@ -1,221 +0,0 @@ -/* Dwarfless register access for powerpc */ - -global _reg_offsets, _stp_regs_registered - -function _stp_register_regs() { - /* Same order as pt_regs */ - _reg_offsets["r0"] = 0 - _reg_offsets["r1"] = 8 - _reg_offsets["r2"] = 16 - _reg_offsets["r3"] = 24 - _reg_offsets["r4"] = 32 - _reg_offsets["r5"] = 40 - _reg_offsets["r6"] = 48 - _reg_offsets["r7"] = 56 - _reg_offsets["r8"] = 64 - _reg_offsets["r9"] = 72 - _reg_offsets["r10"] = 80 - _reg_offsets["r11"] = 88 - _reg_offsets["r12"] = 96 - _reg_offsets["r13"] = 104 - _reg_offsets["r14"] = 112 - _reg_offsets["r15"] = 120 - _reg_offsets["r16"] = 128 - _reg_offsets["r17"] = 136 - _reg_offsets["r18"] = 144 - _reg_offsets["r19"] = 152 - _reg_offsets["r20"] = 160 - _reg_offsets["r21"] = 168 - _reg_offsets["r22"] = 176 - _reg_offsets["r23"] = 184 - _reg_offsets["r24"] = 192 - _reg_offsets["r25"] = 200 - _reg_offsets["r26"] = 208 - _reg_offsets["r27"] = 216 - _reg_offsets["r28"] = 224 - _reg_offsets["r29"] = 232 - _reg_offsets["r30"] = 240 - _reg_offsets["r31"] = 248 - _reg_offsets["nip"] = 256 - _reg_offsets["msr"] = 264 - _reg_offsets["orig_gpr3"] = 272 - _reg_offsets["ctr"] = 280 - _reg_offsets["link"] = 288 - _reg_offsets["xer"] = 296 - _reg_offsets["ccr"] = 304 - _reg_offsets["softe"] = 312 - _reg_offsets["trap"] = 320 - _reg_offsets["dar"] = 328 - _reg_offsets["dsisr"] = 336 - _reg_offsets["result"] = 344 - - /* - * If we ever need to support 32bit powerpc, we can - * get to the register offsets by using just a - * reg32_offset = _reg_offsets["reg"]/2 - * or somesuch - */ - _stp_regs_registered = 1 -} - -function probing_32bit_app() %{ /* pure */ - THIS->__retvalue = _stp_probing_32bit_app(CONTEXT->regs); -%} - -function _stp_get_register_by_offset:long (offset:long) %{ /* pure */ - long value; - if (!CONTEXT->regs) { - CONTEXT->last_error = "No registers available in this context"; - return; - } - if (THIS->offset < 0 || THIS->offset > sizeof(struct pt_regs) - sizeof(long)) { - snprintf(CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), - "Bad register offset: %lld", THIS->offset); - CONTEXT->last_error = CONTEXT->error_buffer; - return; - } - memcpy(&value, ((char *)CONTEXT->regs) + THIS->offset, sizeof(value)); - THIS->__retvalue = value; -%} - -function _stp_sign_extend32:long (value:long) { - if (value & 0x80000000) - value |= (0xffffffff << 32) - return value -} - -function _stp_register:long (name:string, sign_extend:long) { - if (!registers_valid()) { - error("cannot access CPU registers in this context") - return 0 - } - if (!_stp_regs_registered) - _stp_register_regs() - offset = _reg_offsets[name] - if (offset == 0 && !(name in _reg_offsets)) { - error("Unknown register: " . name) - return 0 - } - value = _stp_get_register_by_offset(offset) - if (probing_32bit_app()) { - if (sign_extend) - value = _stp_sign_extend32(value) - else - value &= 0xffffffff - } - return value -} - -/* Return the named register value as a signed value. */ -function register:long (name:string) { - return _stp_register(name, 1) -} - -/* - * Return the named register value as an unsigned value. Specifically, - * don't sign-extend the register value when promoting it to 64 bits. - */ -function u_register:long (name:string) { - return _stp_register(name, 0) -} - -/* - * Return the value of function arg #argnum (1=first arg). - * If truncate=1, mask off the top 32 bits. - * If sign_extend=1 and (truncate=1 or the probepoint we've hit is in a - * 32-bit app), sign-extend the 32-bit value. - */ -function _stp_arg:long (argnum:long, sign_extend:long, truncate:long) { - val = 0 - if (argnum < 1 || argnum > 8) { - error(sprintf("Cannot access arg(%d)", argnum)) - return 0 - } - - if (argnum == 1) - val = u_register("r3") - else if (argnum == 2) - val = u_register("r4") - else if (argnum == 3) - val = u_register("r5") - else if (argnum == 4) - val = u_register("r6") - else if (argnum == 5) - val = u_register("r7") - else if (argnum == 6) - val = u_register("r8") - else if (argnum == 7) - val = u_register("r9") - else (argnum == 8) - val = u_register("r10") - - if (truncate) { - if (sign_extend) - val = _stp_sign_extend32(val) - else - /* High bits may be garbage. */ - val = (val & 0xffffffff); - } - return val; -} - -/* Return the value of function arg #argnum (1=first arg) as a signed int. */ -function int_arg:long (argnum:long) { - return _stp_arg(argnum, 1, 1) -} - -/* Return the value of function arg #argnum (1=first arg) as an unsigned int. */ -function uint_arg:long (argnum:long) { - return _stp_arg(argnum, 0, 1) -} - -function long_arg:long (argnum:long) { - return _stp_arg(argnum, 1, 0) -} - -function ulong_arg:long (argnum:long) { - return _stp_arg(argnum, 0, 0) -} - -function longlong_arg:long (argnum:long) { - if (probing_32bit_app()) { - lowbits = _stp_arg(argnum, 0, 1) - highbits = _stp_arg(argnum+1, 0, 1) - return ((highbits << 32) | lowbits) - } else - return _stp_arg(argnum, 0, 0) -} - -function ulonglong_arg:long (argnum:long) { - return longlong_arg(argnum) -} - -function pointer_arg:long (argnum:long) { - return _stp_arg(argnum, 0, 0) -} - -function s32_arg:long (argnum:long) { - return int_arg(argnum) -} - -function u32_arg:long (argnum:long) { - return uint_arg(argnum) -} - -function s64_arg:long (argnum:long) { - return longlong_arg(argnum) -} - -function u64_arg:long (argnum:long) { - return ulonglong_arg(argnum) -} - -function asmlinkage() %{ /* pure */ %} - -function fastcall() %{ /* pure */ %} - -function regparm() %{ - snprintf(CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), - "regparm is invalid on powerpc."); - CONTEXT->last_error = CONTEXT->error_buffer; -%} diff --git a/tapset/ppc64/syscalls.stp b/tapset/ppc64/syscalls.stp deleted file mode 100644 index 0518d486..00000000 --- a/tapset/ppc64/syscalls.stp +++ /dev/null @@ -1,589 +0,0 @@ -# PPC64-specific system calls - -# sys64_time ________________________________________ -# -# time_t sys64_time(time_t __user * tloc) -# -probe syscall.sys64_time = kernel.function("sys64_time") ? -{ - name = "sys64_time" - argstr = sprintf("%p", $tloc) -} -probe syscall.sys64_time.return = kernel.function("sys64_time").return ? -{ - name = "sys64_time" - retstr = returnstr(1) -} - -# ppc64_personality ________________________________________ -# -# long ppc64_personality(unsigned long personality) -# -probe syscall.ppc64_personality = kernel.function("ppc64_personality") -{ - name = "ppc64_personality" - persona = $personality - argstr = sprint($personality) -} -probe syscall.ppc64_personality.return = kernel.function("ppc64_personality").return -{ - name = "ppc64_personality" - retstr = returnstr(1) -} - -# ppc_rtas ________________________________________ -# -# int ppc_rtas(struct rtas_args __user *uargs) -# -probe syscall.ppc_rtas = kernel.function("ppc_rtas") ? -{ - name = "ppc_rtas" - uargs_uaddr = $uargs - argstr = sprintf("%p", $uargs) -} -probe syscall.ppc_rtas.return = kernel.function("ppc_rtas").return ? -{ - name = "ppc_rtas" - retstr = returnstr(1) -} - -# ppc64_sys32_stime ________________________________________ -# -# long ppc64_sys32_stime(int __user * tptr) -# -probe syscall.ppc64_sys32_stime = kernel.function("ppc64_sys32_stime") ? -{ - name = "ppc64_sys32_stime" - t_uaddr = $tptr - argstr = sprintf("%p", $tptr) -} -probe syscall.ppc64_sys32_stime.return = kernel.function("ppc64_sys32_stime").return ? -{ - name = "ppc64_sys32_stime" - retstr = returnstr(1) -} - -# sys32_ptrace ________________________________________ -# (obsolete) -# int sys32_ptrace(long request, long pid, unsigned long addr, -# unsigned long data) -# -probe syscall.sys32_ptrace = kernel.function("sys32_ptrace") ? -{ - name = "sys32_ptrace" - request = $request - pid = $pid - addr = $addr - data = $data - argstr = sprintf("%p, %p, %p, %p", $request, $pid, $addr, $data) -} -probe syscall.sys32_ptrace.return = kernel.function("sys32_ptrace").return ? -{ - name = "sys32_ptrace" - retstr = returnstr(1) -} - -# sys32_sysinfo ________________________________________ -# -# (obsolete) long sys32_sysinfo(struct sysinfo32 __user *info) -# -probe syscall.sys32_sysinfo = kernel.function("sys32_sysinfo") ? -{ - name = "sys32_sysinfo" - info_uaddr = $info - argstr = sprintf("%p", info_uaddr) -} -probe syscall.sys32_sysinfo.return = kernel.function("sys32_sysinfo").return ? -{ - name = "sys32_sysinfo" - retstr = returnstr(1) -} - -# ipc ________________________________________ -# -# long sys32_ipc(u32 call, u32 first, u32 second, u32 third, -# compat_uptr_t ptr, u32 fifth) -# -probe syscall.ipc = kernel.function("sys32_ipc") ? -{ - name = "ipc" - argstr = sprintf("%d, %d, %d, %d, %p, %d", $call, $first, $second, - $third, $ptr, $fifth) -} -probe syscall.ipc.return = kernel.function("sys32_ipc").return ? -{ - name = "sys_ipc" - retstr = returnstr(1) -} - -# sys32_sigreturn ________________________________________ -# -# long sys32_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, -# struct pt_regs *regs) -# -probe syscall.sys32_sigreturn = kernel.function("sys32_sigreturn") ? -{ - name = "sys32_sigreturn" - r3 = $r3 - r4 = $r4 - r5 = $r5 - r6 = $r6 - r7 = $r7 - r8 = $r8 - argstr = sprintf("%p, %p, %p, %p, %p, %p", - $r3, $r4, $r5, $r6, $r7, $r8) -} -probe syscall.sys32_sigreturn.return = kernel.function("sys32_sigreturn").return ? -{ - name = "sys32_sigreturn" - retstr = returnstr(1) -} -# sys32_adjtimex ________________________________________ -# -# long sys32_adjtimex(struct timex32 __user *utp) -# -probe syscall.sys32_adjtimex = kernel.function("sys32_adjtimex") ? -{ - name = "sys32_adjtimex" - argstr = sprintf("%p", $utp) -} -probe syscall.sys32_adjtimex.return = kernel.function("sys32_adjtimex").return ? -{ - name = "sys32_adjtimex" - retstr = returnstr(1) -} - -# sys32_getdents ________________________________________ -# -# asmlinkage long sys32_getdents(unsigned int fd, -# struct linux_dirent32 __user *dirent, -# unsigned int count) -# -probe syscall.sys32_getdents = kernel.function("sys32_getdents") ? -{ - name = "sys32_getdents" - fd = $fd - dirp_uaddr = $dirent - count = $count - argstr = sprintf("%d, %p, %d", fd, dirp_uaddr, count) -} -probe syscall.sys32_getdents.return = kernel.function("sys32_getdents").return ? -{ - name = "sys32_getdents" - retstr = returnstr(1) -} - -# compat_sys_sysctl ________________________________________ -# -# long compat_sys_sysctl(struct __sysctl_args32 __user *args) -# -probe syscall.compat_sysctl = kernel.function("compat_sys_sysctl") ? -{ - name = "sysctl" - argstr = sprintf("%p", $args) -} -probe syscall.compat_sysctl.return = kernel.function("compat_sys_sysctl").return ? -{ - name = "sysctl" - retstr = returnstr(1) -} - -# sys32_sched_setparam ________________________________________ -# -# asmlinkage long sys32_sched_setparam(u32 pid, -# struct sched_param __user *param) -# -probe syscall.sys32_sched_setparam = kernel.function("sys32_sched_setparam") ? -{ - name = "sys32_sched_setparam" - pid = $pid - param_uaddr = $param - argstr = sprintf("%d, %p", pid, param_uaddr) -} -probe syscall.sys32_sched_setparam.return = kernel.function("sys32_sched_setparam").return ? -{ - name = "sys32_sched_setparam" - retstr = returnstr(1) -} - -# sys32_sched_rr_get_interval ________________________________________ -# -# asmlinkage long sys32_sched_rr_get_interval(u32 pid, -# struct compat_timespec __user *interval) -# -probe syscall.sys32_sched_rr_get_interval = kernel.function("sys32_sched_rr_get_interval") ? -{ - name = "sys32_sched_rr_get_interval" - pid = $pid - interval_uaddr = $interval - argstr = sprintf("%d, %p", pid, interval_uaddr) -} -probe syscall.sys32_sched_rr_get_interval.return = kernel.function("sys32_sched_rr_get_interval").return ? -{ - name = "sys32_sched_rr_get_interval" - retstr = returnstr(1) -} - -# sys32_rt_sigpending ________________________________________ -# -# long sys32_rt_sigpending(compat_sigset_t __user *set, -# compat_size_t sigsetsize) -# -probe syscall.sys32_rt_sigpending = kernel.function("sys32_rt_sigpending") ? -{ - name = "sys32_rt_sigpending" - set_uaddr = $set - sigsetsize = $sigsetsize - argstr = sprintf("%p, %d", set_uaddr, $sigsetsize) -} -probe syscall.sys32_rt_sigpending.return = kernel.function("sys32_rt_sigpending").return ? -{ - name = "sys32_rt_sigpending" - retstr = returnstr(1) -} -# sys32_rt_sigtimedwait ________________________________________ -# -# long sys32_rt_sigtimedwait(compat_sigset_t __user *uthese, -# compat_siginfo_t __user *uinfo, -# struct compat_timespec __user *uts, -# compat_size_t sigsetsize) -# -probe syscall.sys32_rt_sigtimedwait = kernel.function("sys32_rt_sigtimedwait") ? -{ - name = "sys32_rt_sigtimedwait" - uthese_uaddr = $uthese - uinfo_uaddr = $uinfo - uts_uaddr = $uts - sigsetsize = $sigsetsize - argstr = sprintf("%p, %p, %p, %p", uthese_uaddr, - uinfo_uaddr, uts_uaddr, sigsetsize) -} -probe syscall.sys32_rt_sigtimedwait.return = kernel.function("sys32_rt_sigtimedwait").return ? -{ - name = "sys32_rt_sigtimedwait" - retstr = returnstr(1) -} -# sys32_rt_sigqueueinfo ________________________________________ -# -# long sys32_rt_sigqueueinfo(u32 pid, u32 sig, compat_siginfo_t __user *uinfo) -# -probe syscall.sys32_rt_sigqueueinfo = kernel.function("sys32_rt_sigqueueinfo") ? -{ - name = "sys32_rt_sigqueueinfo" - pid = $pid - sig = $sig - uinfo_uaddr = $uinfo - argstr = sprintf("%p, %s, %p", pid, _signal_name($sig), - uinfo_uaddr) -} -probe syscall.sys32_rt_sigqueueinfo.return = kernel.function("sys32_rt_sigqueueinfo").return ? -{ - name = "sys32_rt_sigqueueinfo" - retstr = returnstr(1) -} -# sys32_sigaltstack ________________________________________ -# -# int sys32_sigaltstack(u32 __new, u32 __old, int r5, -# int r6, int r7, int r8, struct pt_regs *regs) -# -probe syscall.sys32_sigaltstack = kernel.function("sys32_sigaltstack") ? -{ - name = "sys32_sigaltstack" - argstr = "FIXME" -} -probe syscall.sys32_sigaltstack.return = kernel.function("sys32_sigaltstack").return ? -{ - name = "sys32_sigaltstack" - retstr = returnstr(1) -} -# sys32_sendfile64 ________________________________________ -# -# asmlinkage int sys32_sendfile64(int out_fd, int in_fd, -# compat_loff_t __user *offset, s32 count) -# -probe syscall.sys32_sendfile64 = kernel.function("sys32_sendfile64") ? -{ - name = "sys32_sendfile64" - out_fd = $out_fd - in_fd = $in_fd - offset_uaddr = $offset - count = $count - argstr = sprintf("%d, %d, %p, %d", $out_fd, $in_fd, offset_uaddr, - $count) -} -probe syscall.sys32_sendfile64.return = kernel.function("sys32_sendfile64").return ? -{ - name = "sys32_sendfile64" - retstr = returnstr(1) -} -# ppc32_timer_create ________________________________________ -# -# long ppc32_timer_create(clockid_t clock, -# struct compat_sigevent __user *ev32, -# timer_t __user *timer_id) -# -probe syscall.ppc32_timer_create = kernel.function("ppc32_timer_create") ? -{ - name = "ppc32_timer_create" - which_clock = $clock - timer_event_spec = $ev32 - created_timer_id = $timer_id - argstr = sprintf("%d, %p, %p", which_clock, timer_event_spec, - created_timer_id) -} -probe syscall.ppc32_timer_create.return = kernel.function("ppc32_timer_create").return ? -{ - name = "ppc32_timer_create" - retstr = returnstr(1) -} -# compat_timer_settime ________________________________________ -# -# long compat_timer_settime(timer_t timer_id, int flags, -# struct compat_itimerspec __user *new, -# struct compat_itimerspec __user *old) -# -probe syscall.compat_timer_settime = kernel.function("compat_timer_settime") ? -{ - name = "compat_timer_settime" - timer_id = $timer_id - flags = $flags - new_setting_uaddr = $new - old_setting_uaddr = $old - argstr = sprintf("%d, %d, %p, %p", timer_id, flags, - new_setting_uaddr, old_setting_uaddr) -} -probe syscall.compat_timer_settime.return = kernel.function("compat_timer_settime").return ? -{ - name = "compat_timer_settime" - retstr = returnstr(1) -} -# compat_timer_gettime ________________________________________ -# -# long compat_timer_gettime(timer_t timer_id, -# struct compat_itimerspec __user *setting) -# -probe syscall.compat_timer_gettime = kernel.function("compat_timer_gettime") ? -{ - name = "compat_timer_gettime" - timer_id = $timer_id - setting_uaddr = $setting - argstr = sprintf("%d, %p", timer_id, setting_uaddr) -} -probe syscall.compat_timer_gettime.return = kernel.function("compat_timer_gettime").return ? -{ - name = "compat_timer_gettime" - retstr = returnstr(1) -} -# compat_clock_settime ________________________________________ -# -# long compat_clock_settime(clockid_t which_clock, -# struct compat_timespec __user *tp) -# -probe syscall.compat_clock_settime = kernel.function("compat_clock_settime") ? -{ - name = "compat_clock_settime" - which_clock = $which_clock - tp_uaddr = $tp - argstr = sprintf("%d, %p", which_clock, tp_uaddr) -} -probe syscall.compat_clock_settime.return = kernel.function("compat_clock_settime").return ? -{ - name = "compat_clock_settime" - retstr = returnstr(1) -} -# sys32_swapcontext ________________________________________ -# -# long sys32_swapcontext(struct ucontext32 __user *old_ctx, -# struct ucontext32 __user *new_ctx, -# int ctx_size, int r6, int r7, int r8, -# struct pt_regs *regs) -# -probe syscall.sys32_swapcontext = kernel.function("sys32_swapcontext") ? -{ - name = "sys32_swapcontext" - old_ctx_uaddr = $old_ctx - new_ctx_uaddr = $new_ctx - r5 = $ctx_size - r6 = $r6 - r7 = $r7 - r8 = $r8 - regs = $regs - argstr = sprintf("%p, %p, %d, %d, %d, %d, %p", - old_ctx_uaddr, new_ctx_uaddr, r5, r6, r7, r8, regs) -} -probe syscall.sys32_swapcontext.return = kernel.function("sys32_swapcontext").return ? -{ - name = "sys32_swapcontext" - retstr = returnstr(1) -} -# sys32_utimes ________________________________________ -# -# asmlinkage long sys32_utimes(char __user *filename, -# struct compat_timeval __user *tvs) -# -probe syscall.sys32_utimes = kernel.function("sys32_utimes") ? -{ - name = "sys32_utimes" - filename_uaddr = $filename - path = user_string($filename) - tvp_uaddr = $tvs - argstr = sprintf("%s, %p", user_string_quoted($filename), tvp_uaddr) -} -probe syscall.sys32_utimes.return = kernel.function("sys32_utimes").return ? -{ - name = "sys32_utimes" - retstr = returnstr(1) -} -# compat_mbind ________________________________________ -# -# asmlinkage long compat_mbind(compat_ulong_t start, compat_ulong_t len, -# compat_ulong_t mode, compat_ulong_t __user *nmask, -# compat_ulong_t maxnode, compat_ulong_t flags) -# -probe syscall.compat_mbind = kernel.function("compat_mbind") ? -{ - name = "compat_mbind" - start_uaddr = $start - len = $len - policy = $mode - nodemask_uaddr = $nmask - maxnode = $maxnode - flags = $flags - argstr = sprintf("%p, %d, %d, %p, %d, %d", start_uaddr, len, - policy, nodemask_uaddr, maxnode, flags) -} -probe syscall.compat_mbind.return = kernel.function("compat_mbind").return ? -{ - name = "compat_mbind" - retstr = returnstr(1) -} -# compat_get_mempolicy ________________________________________ -# -# asmlinkage long compat_get_mempolicy(int __user *policy, -# compat_ulong_t __user *nmask, -# compat_ulong_t maxnode, -# compat_ulong_t addr, compat_ulong_t flags) -# -probe syscall.compat_get_mempolicy = kernel.function("compat_get_mempolicy") ? -{ - name = "compat_get_mempolicy" - policy_uaddr = $policy - nmask_uaddr = $nmask - maxnode = $maxnode - addr = $addr - flags = $flags - argstr = sprintf("%p, %p, %d, %d", policy_uaddr, nmask_uaddr, - maxnode, addr) -} -probe syscall.compat_get_mempolicy.return = kernel.function("compat_get_mempolicy").return ? -{ - name = "compat_get_mempolicy" - retstr = returnstr(1) -} -# compat_set_mempolicy ________________________________________ -# -# asmlinkage long compat_set_mempolicy(int mode, compat_ulong_t __user *nmask, -# compat_ulong_t maxnode) -# -probe syscall.compat_set_mempolicy = kernel.function("compat_set_mempolicy") ? -{ - name = "compat_set_mempolicy" - policy = $mode - nodemask_uaddr = $nmask - maxnode = $maxnode - argstr = sprintf("%d, %p, %d", policy, nodemask_uaddr, maxnode) -} -probe syscall.compat_set_mempolicy.return = kernel.function("compat_set_mempolicy").return ? -{ - name = "compat_set_mempolicy" - retstr = returnstr(1) -} - -# mmap -# long sys_mmap(unsigned long addr, size_t len, -# unsigned long prot, unsigned long flags, -# unsigned long fd, off_t offset) -# -probe syscall.mmap = kernel.function("sys_mmap") ? -{ - name = "mmap" - start = $addr - len = $len - prot = $prot - flags = $flags - fd = $fd - offset = $offset - argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, $len, - _mprotect_prot_str($prot), _mmap_flags($flags), $fd, $offset) -} - -probe syscall.mmap.return = kernel.function("sys_mmap").return ? -{ - name = "mmap" - retstr = returnstr(2) -} - -# mmap2 -# long sys_mmap2(unsigned long addr, size_t len, -# unsigned long prot, unsigned long flags, -# unsigned long fd, unsigned long pgoff) -# long compat_sys_mmap2(unsigned long addr, size_t len, -# unsigned long prot, unsigned long flags, -# unsigned long fd, unsigned long pgoff) -# -probe syscall.mmap2 = kernel.function("sys_mmap2") ?, - kernel.function("compat_sys_mmap2") ? -{ - name = "mmap2" - start = $addr - length = $len - prot = $prot - flags = $flags - fd = $fd - pgoffset = $pgoff - argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, - $len, _mprotect_prot_str($prot), _mmap_flags($flags), - $fd, $pgoff) -} -probe syscall.mmap2.return = kernel.function("sys_mmap2").return ?, - kernel.function("compat_sys_mmap2").return ? -{ - name = "mmap2" - retstr = returnstr(2) -} - -# ppc64_sys_stime ________________________________________ -# -# long ppc64_sys_stime(long __user * tptr) -# -probe syscall.ppc64_sys_stime = kernel.function("ppc64_sys_stime") ? -{ - name = "ppc64_sys_stime" - /* FIXME */ - t_uaddr = $tptr - argstr = sprintf("%p", t_uaddr) -} -probe syscall.ppc64_sys_stime.return = kernel.function("ppc64_sys_stime").return ? -{ - name = "ppc64_sys_stime" - retstr = returnstr(1) -} -# ppc64_newuname ________________________________________ -# -# asmlinkage int ppc64_newuname(struct new_utsname __user * name) -# -probe syscall.ppc64_newuname = kernel.function("ppc64_newuname") ? -{ - name = "ppc64_newuname" - name_uaddr = $name - argstr = sprintf("%p", name_uaddr) -} -probe syscall.ppc64_newuname.return = kernel.function("ppc64_newuname").return ? -{ - name = "ppc64_newuname" - retstr = returnstr(1) -} - -# -# - diff --git a/tapset/s390/nd_syscalls.stp b/tapset/s390/nd_syscalls.stp new file mode 100644 index 00000000..bd5f5c32 --- /dev/null +++ b/tapset/s390/nd_syscalls.stp @@ -0,0 +1,187 @@ +# S390-specific system calls + +%(arch == "s390" %? + +# getresgid __________________________________________________ +# long sys32_getresgid16(u16 __user *rgid, u16 __user *egid, u16 __user *sgid) +# +probe nd_syscall.getresgid16 = kprobe.function("sys32_getresgid16") ? +{ + name = "getresgid" + // argstr = sprintf("%p, %p, %p", $rgid, $egid, $sgid) + asmlinkage() + argstr = sprintf("%p, %p, %p", pointer_arg(1), pointer_arg(2), pointer_arg(3)) +} +probe nd_syscall.getresgid16.return = kprobe.function("sys32_getresgid16").return ? +{ + name = "getresgid" + retstr = returnstr(1) +} + +# getresuid __________________________________________________ +# long sys32_getresuid16(u16 __user *ruid, u16 __user *euid, u16 __user *suid) +# +probe nd_syscall.getresuid16 = kprobe.function("sys32_getresuid16") ? +{ + name = "getresuid" + // argstr = sprintf("%p, %p, %p", $ruid, $euid, $suid) + asmlinkage() + argstr = sprintf("%p, %p, %p", pointer_arg(1), pointer_arg(2), pointer_arg(3)) +} +probe nd_syscall.getresuid16.return = kprobe.function("sys32_getresuid16").return ? +{ + name = "getresuid" + retstr = returnstr(1) +} + +# ipc _________________________________________________ +# long sys32_ipc(u32 call, int first, int second, int third, u32 ptr) +# +probe nd_syscall.ipc = kprobe.function("sys32_ipc") ? +{ + name = "ipc" + // argstr = sprintf("%d, %d, %d, %d, %p", $call, $first, $second, $third, $ptr) + asmlinkage() + argstr = sprintf("%d, %d, %d, %d, %p", uint_arg(1), int_arg(2), int_arg(3), int_arg(4), uint_arg(5)) +} +probe nd_syscall.ipc.return = kprobe.function("sys_ipc").return ? +{ + name = "ipc" + retstr = returnstr(1) +} + +# mmap _________________________________________________ +# long old_mmap(struct mmap_arg_struct __user *arg) +# long old32_mmap(struct mmap_arg_struct_emu31 __user *arg) +# +probe nd_syscall.mmap = kprobe.function("old_mmap") ?, + kprobe.function("old32_mmap") ?, + kprobe.function("SyS_s390_old_mmap") ? +{ + name = "mmap" + + // if ((probefunc() == "old_mmap") || (probefunc() == "SyS_s390_old_mmap")) + // argstr = get_mmap_args($arg) + // else + // argstr = get_32mmap_args($arg) + + asmlinkage() + if ((probefunc() == "old_mmap") || (probefunc() == "SyS_s390_old_mmap")) + argstr = get_mmap_args(pointer_arg(1)) + else + argstr = get_32mmap_args(pointer_arg(1)) +} +probe nd_syscall.mmap.return = kprobe.function("old_mmap").return ?, + kprobe.function("old32_mmap").return ?, + kprobe.function("SyS_s390_old_mmap").return ? +{ + name = "mmap" + retstr = returnstr(2) +} + +# mmap2 _________________________________________________ +# +# long sys_mmap2(struct mmap_arg_struct __user *arg) +# long sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg) +# +probe nd_syscall.mmap2 = kprobe.function("sys_mmap2") ?, + kprobe.function("sys32_mmap2") ?, + kprobe.function("SyS_mmap2") ? +{ + name = "mmap2" + + // if ((probefunc() == "sys_mmap2") || (probefunc() == "SyS_mmap2")) + // argstr = get_mmap_args($arg) + // else + // argstr = get_32mmap_args($arg) + + asmlinkage() + if ((probefunc() == "sys_mmap2") || (probefunc() == "SyS_mmap2")) + argstr = get_mmap_args(pointer_arg(1)) + else + argstr = get_32mmap_args(pointer_arg(1)) +} + +probe nd_syscall.mmap2.return = kprobe.function("sys_mmap2").return ?, + kprobe.function("sys32_mmap2").return ?, + kprobe.function("SyS_mmap2").return ? +{ + name = "mmap2" + retstr = returnstr(2) +} + +# sysctl _____________________________________________________ +# +# long sys32_sysctl(struct __sysctl_args32 __user *args) +# +probe nd_syscall.sysctl32 = kprobe.function("sys32_sysctl") ? +{ + name = "sysctl" + // argstr = sprintf("%p", $args) + asmlinkage() + argstr = sprintf("%p", pointer_arg(1)) +} +probe nd_syscall.sysctl32.return = kprobe.function("sys32_sysctl").return ? +{ + name = "sysctl" + retstr = returnstr(1) +} + +/* compat */ +function get_32mmap_args:string (args:long) +%{ /* pure */ + struct mmap_arg_struct_emu31 { + u32 addr; + u32 len; + u32 prot; + u32 flags; + u32 fd; + u32 offset; + }a; + + + char proto[60]; + char flags[256]; + + if(_stp_copy_from_user((char *)&a, + (char *)THIS->args, sizeof(a))== 0){ + + /* _mprotect_prot_str */ + proto[0] = '\0'; + if(a.prot){ + if(a.prot & 1) strcat (proto, "PROT_READ|"); + if(a.prot & 2) strcat (proto, "PROT_WRITE|"); + if(a.prot & 4) strcat (proto, "PROT_EXEC|"); + } else { + strcat (proto, "PROT_NONE"); + } + if (proto[0] != '\0') proto[strlen(proto)-1] = '\0'; + + /* _mmap_flags */ + flags[0]='\0'; + if (a.flags & 1) strcat (flags, "MAP_SHARED|"); + if (a.flags & 2) strcat (flags, "MAP_PRIVATE|"); + if (a.flags & 0x10) strcat (flags, "MAP_FIXED|"); + if (a.flags & 0x20) strcat (flags, "MAP_ANONYMOUS|"); + if (a.flags & 0x100) strcat (flags, "MAP_GROWSDOWN|"); + if (a.flags & 0x800) strcat (flags, "MAP_DENYWRITE|"); + if (a.flags & 0x1000) strcat (flags, "MAP_EXECUTABLE|"); + if (a.flags & 0x2000) strcat (flags, "MAP_LOCKED|"); + if (a.flags & 0x4000) strcat (flags, "MAP_NORESERVE|"); + if (a.flags & 0x8000) strcat (flags, "MAP_POPULATE|"); + if (a.flags & 0x10000) strcat (flags, "MAP_NONBLOCK|"); + if (flags[0] != '\0') flags[strlen(flags)-1] = '\0'; + + sprintf(THIS->__retvalue,"0x%x, %d, %s, %s, %d, %d", + a.addr, + a.len, + proto, + flags, + a.fd, + a.offset); + }else{ + strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN); + } +%} + +%) diff --git a/tapset/s390/registers.stp b/tapset/s390/registers.stp new file mode 100644 index 00000000..79482b73 --- /dev/null +++ b/tapset/s390/registers.stp @@ -0,0 +1,221 @@ +/* Dwarfless register access for s390x */ + +global _reg_offsets, _stp_regs_registered + +function _stp_register_regs() { + /* Same order as pt_regs */ + _reg_offsets["args"] = 0 + _reg_offsets["psw.mask"] = 8 + _reg_offsets["psw.addr"] = 16 + _reg_offsets["r0"] = 24 + _reg_offsets["r1"] = 32 + _reg_offsets["r2"] = 40 + _reg_offsets["r3"] = 48 + _reg_offsets["r4"] = 56 + _reg_offsets["r5"] = 64 + _reg_offsets["r6"] = 72 + _reg_offsets["r7"] = 80 + _reg_offsets["r8"] = 88 + _reg_offsets["r9"] = 96 + _reg_offsets["r10"] = 104 + _reg_offsets["r11"] = 112 + _reg_offsets["r12"] = 120 + _reg_offsets["r13"] = 128 + _reg_offsets["r14"] = 136 + _reg_offsets["r15"] = 144 + + _reg_offsets["orig_gpr2"] = 152 + _reg_offsets["ilc"] = 160 + _reg_offsets["trap"] = 162 + + /* + * If we ever need to support s390 (31-bit arch), we can + * get to the register offsets by using just a + * reg32_offset = _reg_offsets["reg"]/2 + * or somesuch + */ + _stp_regs_registered = 1 +} + + +/* + * Though the flag says 31bit, asm-s390/thread_info.h comment + * says "32bit process" + */ +function probing_32bit_app() %{ /* pure */ + if (CONTEXT->regs) + THIS->__retvalue = (user_mode(CONTEXT->regs) && + test_tsk_thread_flag(current, TIF_31BIT)); + else + THIS->__retvalue = 0; +%} + +function _stp_probing_kernel: long () %{ /* pure */ + THIS->__retvalue = !user_mode(CONTEXT->regs); +%} + +function _stp_get_register_by_offset:long (offset:long) %{ /* pure */ + long value; + if (!CONTEXT->regs) { + CONTEXT->last_error = "No registers available in this context"; + return; + } + if (THIS->offset < 0 || THIS->offset > sizeof(struct pt_regs) - sizeof(unsigned short)) { + snprintf(CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), + "Bad register offset: %lld", THIS->offset); + CONTEXT->last_error = CONTEXT->error_buffer; + return; + } + + if (THIS->offset < sizeof(struct pt_regs) - 2 * sizeof(unsigned short)) + memcpy(&value, ((char *)CONTEXT->regs) + THIS->offset, + sizeof(value)); + else { + /* ilc or trap */ + unsigned short us_value; + memcpy(&us_value, ((char *)CONTEXT->regs) + THIS->offset, + sizeof(us_value)); + value = us_value; // not sign-extended + } + THIS->__retvalue = value; +%} + +function _stp_sign_extend32:long (value:long) { + if (value & 0x80000000) + value |= (0xffffffff << 32) + return value +} + +function _stp_register:long (name:string, sign_extend:long) { + if (!registers_valid()) { + error("cannot access CPU registers in this context") + return 0 + } + if (!_stp_regs_registered) + _stp_register_regs() + offset = _reg_offsets[name] + if (offset == 0 && !(name in _reg_offsets)) { + error("Unknown register: " . name) + return 0 + } + value = _stp_get_register_by_offset(offset) + if (probing_32bit_app()) { + if (sign_extend) + value = _stp_sign_extend32(value) + else + value &= 0xffffffff + } + return value +} + +/* Return the named register value as a signed value. */ +function register:long (name:string) { + return _stp_register(name, 1) +} + +/* + * Return the named register value as an unsigned value. Specifically, + * don't sign-extend the register value when promoting it to 64 bits. + */ +function u_register:long (name:string) { + return _stp_register(name, 0) +} + +/* + * Return the value of function arg #argnum (1=first arg). + * If truncate=1, mask off the top 32 bits. + * If sign_extend=1 and (truncate=1 or the probepoint we've hit is in a + * 32-bit app), sign-extend the 32-bit value. + * + * We don't yet support extracting arg #6 and beyond, which are passed + * on stack + */ +function _stp_arg:long (argnum:long, sign_extend:long, truncate:long) { + val = 0 + if (argnum < 1 || argnum > 5) { + error(sprintf("Cannot access arg(%d)", argnum)) + return 0 + } + + if (argnum == 1) + val = u_register("r2") + else if (argnum == 2) + val = u_register("r3") + else if (argnum == 3) + val = u_register("r4") + else if (argnum == 4) + val = u_register("r5") + else (argnum == 5) + val = u_register("r6") + + if (truncate) { + if (sign_extend) + val = _stp_sign_extend32(val) + else + /* High bits may be garbage. */ + val = (val & 0xffffffff); + } + return val; +} + +/* Return the value of function arg #argnum (1=first arg) as a signed int. */ +function int_arg:long (argnum:long) { + return _stp_arg(argnum, 1, 1) +} + +/* Return the value of function arg #argnum (1=first arg) as an unsigned int. */ +function uint_arg:long (argnum:long) { + return _stp_arg(argnum, 0, 1) +} + +function long_arg:long (argnum:long) { + return _stp_arg(argnum, 1, 0) +} + +function ulong_arg:long (argnum:long) { + return _stp_arg(argnum, 0, 0) +} + +function longlong_arg:long (argnum:long) { + if (probing_32bit_app()) { + /* TODO verify if this is correct for 31bit apps */ + highbits = _stp_arg(argnum, 0, 1) + lowbits = _stp_arg(argnum+1, 0, 1) + return ((highbits << 32) | lowbits) + } else + return _stp_arg(argnum, 0, 0) +} + +function ulonglong_arg:long (argnum:long) { + return longlong_arg(argnum) +} + +function pointer_arg:long (argnum:long) { + return _stp_arg(argnum, 0, 0) +} + +function s32_arg:long (argnum:long) { + return int_arg(argnum) +} + +function u32_arg:long (argnum:long) { + return uint_arg(argnum) +} + +function s64_arg:long (argnum:long) { + return longlong_arg(argnum) +} + +function u64_arg:long (argnum:long) { + return ulonglong_arg(argnum) +} + +function asmlinkage() %{ /* pure */ %} + +function fastcall() %{ /* pure */ %} + +function regparm() %{ + snprintf(CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), + "regparm is invalid on s390."); + CONTEXT->last_error = CONTEXT->error_buffer; +%} diff --git a/tapset/s390/syscalls.stp b/tapset/s390/syscalls.stp new file mode 100644 index 00000000..aba7d6bf --- /dev/null +++ b/tapset/s390/syscalls.stp @@ -0,0 +1,169 @@ +# S390-specific system calls + +%(arch == "s390" %? + +# getresgid __________________________________________________ +# long sys32_getresgid16(u16 __user *rgid, u16 __user *egid, u16 __user *sgid) +# +probe syscall.getresgid16 = kernel.function("sys32_getresgid16") ? +{ + name = "getresgid" + argstr = sprintf("%p, %p, %p", $rgid, $egid, $sgid) +} +probe syscall.getresgid16.return = kernel.function("sys32_getresgid16").return ? +{ + name = "getresgid" + retstr = returnstr(1) +} +# getresuid __________________________________________________ +# long sys32_getresuid16(u16 __user *ruid, u16 __user *euid, u16 __user *suid) +# +probe syscall.getresuid16 = kernel.function("sys32_getresuid16") ? +{ + name = "getresuid" + argstr = sprintf("%p, %p, %p", $ruid, $euid, $suid) +} +probe syscall.getresuid16.return = kernel.function("sys32_getresuid16").return ? +{ + name = "getresuid" + retstr = returnstr(1) +} + +# ipc _________________________________________________ +# long sys32_ipc(u32 call, int first, int second, int third, u32 ptr) +# +probe syscall.ipc = kernel.function("sys32_ipc") ? +{ + name = "ipc" + argstr = sprintf("%d, %d, %d, %d, %p", $call, $first, $second, $third, $ptr) +} +probe syscall.ipc.return = kernel.function("sys_ipc").return ? +{ + name = "ipc" + retstr = returnstr(1) +} + +# mmap _________________________________________________ +# long old_mmap(struct mmap_arg_struct __user *arg) +# long old32_mmap(struct mmap_arg_struct_emu31 __user *arg) +# +probe syscall.mmap = kernel.function("old_mmap") ?, + kernel.function("old32_mmap") ?, + kernel.function("SyS_s390_old_mmap") ? +{ + name = "mmap" + + if ((probefunc() == "old_mmap") || (probefunc() == "SyS_s390_old_mmap")) + argstr = get_mmap_args($arg) + else + argstr = get_32mmap_args($arg) +} + +probe syscall.mmap.return = kernel.function("old_mmap").return ?, + kernel.function("old32_mmap").return ?, + kernel.function("SyS_s390_old_mmap").return ? +{ + name = "mmap" + retstr = returnstr(2) +} + + +# mmap2 _________________________________________________ +# +# long sys_mmap2(struct mmap_arg_struct __user *arg) +# long sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg) +# +probe syscall.mmap2 = kernel.function("sys_mmap2") ?, + kernel.function("sys32_mmap2") ?, + kernel.function("SyS_mmap2") ? +{ + name = "mmap2" + + if ((probefunc() == "sys_mmap2") || (probefunc() == "SyS_mmap2")) + argstr = get_mmap_args($arg) + else + argstr = get_32mmap_args($arg) +} + +probe syscall.mmap2.return = kernel.function("sys_mmap2").return ?, + kernel.function("sys32_mmap2").return ?, + kernel.function("SyS_mmap2").return ? +{ + name = "mmap2" + retstr = returnstr(2) +} + +# sysctl _____________________________________________________ +# +# long sys32_sysctl(struct __sysctl_args32 __user *args) +# +probe syscall.sysctl32 = kernel.function("sys32_sysctl") ? +{ + name = "sysctl" + argstr = sprintf("%p", $args) +} +probe syscall.sysctl32.return = kernel.function("sys32_sysctl").return ? +{ + name = "sysctl" + retstr = returnstr(1) +} + + +/* compat */ +function get_32mmap_args:string (args:long) +%{ /* pure */ + struct mmap_arg_struct_emu31 { + u32 addr; + u32 len; + u32 prot; + u32 flags; + u32 fd; + u32 offset; + }a; + + + char proto[60]; + char flags[256]; + + if(_stp_copy_from_user((char *)&a, + (char *)THIS->args, sizeof(a))== 0){ + + /* _mprotect_prot_str */ + proto[0] = '\0'; + if(a.prot){ + if(a.prot & 1) strcat (proto, "PROT_READ|"); + if(a.prot & 2) strcat (proto, "PROT_WRITE|"); + if(a.prot & 4) strcat (proto, "PROT_EXEC|"); + } else { + strcat (proto, "PROT_NONE"); + } + if (proto[0] != '\0') proto[strlen(proto)-1] = '\0'; + + /* _mmap_flags */ + flags[0]='\0'; + if (a.flags & 1) strcat (flags, "MAP_SHARED|"); + if (a.flags & 2) strcat (flags, "MAP_PRIVATE|"); + if (a.flags & 0x10) strcat (flags, "MAP_FIXED|"); + if (a.flags & 0x20) strcat (flags, "MAP_ANONYMOUS|"); + if (a.flags & 0x100) strcat (flags, "MAP_GROWSDOWN|"); + if (a.flags & 0x800) strcat (flags, "MAP_DENYWRITE|"); + if (a.flags & 0x1000) strcat (flags, "MAP_EXECUTABLE|"); + if (a.flags & 0x2000) strcat (flags, "MAP_LOCKED|"); + if (a.flags & 0x4000) strcat (flags, "MAP_NORESERVE|"); + if (a.flags & 0x8000) strcat (flags, "MAP_POPULATE|"); + if (a.flags & 0x10000) strcat (flags, "MAP_NONBLOCK|"); + if (flags[0] != '\0') flags[strlen(flags)-1] = '\0'; + + sprintf(THIS->__retvalue,"0x%x, %d, %s, %s, %d, %d", + a.addr, + a.len, + proto, + flags, + a.fd, + a.offset); + }else{ + strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN); + } +%} + +%) diff --git a/tapset/s390x/nd_syscalls.stp b/tapset/s390x/nd_syscalls.stp deleted file mode 100644 index 63435265..00000000 --- a/tapset/s390x/nd_syscalls.stp +++ /dev/null @@ -1,187 +0,0 @@ -# S390-specific system calls - -%(arch == "s390x" %? - -# getresgid __________________________________________________ -# long sys32_getresgid16(u16 __user *rgid, u16 __user *egid, u16 __user *sgid) -# -probe nd_syscall.getresgid16 = kprobe.function("sys32_getresgid16") ? -{ - name = "getresgid" - // argstr = sprintf("%p, %p, %p", $rgid, $egid, $sgid) - asmlinkage() - argstr = sprintf("%p, %p, %p", pointer_arg(1), pointer_arg(2), pointer_arg(3)) -} -probe nd_syscall.getresgid16.return = kprobe.function("sys32_getresgid16").return ? -{ - name = "getresgid" - retstr = returnstr(1) -} - -# getresuid __________________________________________________ -# long sys32_getresuid16(u16 __user *ruid, u16 __user *euid, u16 __user *suid) -# -probe nd_syscall.getresuid16 = kprobe.function("sys32_getresuid16") ? -{ - name = "getresuid" - // argstr = sprintf("%p, %p, %p", $ruid, $euid, $suid) - asmlinkage() - argstr = sprintf("%p, %p, %p", pointer_arg(1), pointer_arg(2), pointer_arg(3)) -} -probe nd_syscall.getresuid16.return = kprobe.function("sys32_getresuid16").return ? -{ - name = "getresuid" - retstr = returnstr(1) -} - -# ipc _________________________________________________ -# long sys32_ipc(u32 call, int first, int second, int third, u32 ptr) -# -probe nd_syscall.ipc = kprobe.function("sys32_ipc") ? -{ - name = "ipc" - // argstr = sprintf("%d, %d, %d, %d, %p", $call, $first, $second, $third, $ptr) - asmlinkage() - argstr = sprintf("%d, %d, %d, %d, %p", uint_arg(1), int_arg(2), int_arg(3), int_arg(4), uint_arg(5)) -} -probe nd_syscall.ipc.return = kprobe.function("sys_ipc").return ? -{ - name = "ipc" - retstr = returnstr(1) -} - -# mmap _________________________________________________ -# long old_mmap(struct mmap_arg_struct __user *arg) -# long old32_mmap(struct mmap_arg_struct_emu31 __user *arg) -# -probe nd_syscall.mmap = kprobe.function("old_mmap") ?, - kprobe.function("old32_mmap") ?, - kprobe.function("SyS_s390_old_mmap") ? -{ - name = "mmap" - - // if ((probefunc() == "old_mmap") || (probefunc() == "SyS_s390_old_mmap")) - // argstr = get_mmap_args($arg) - // else - // argstr = get_32mmap_args($arg) - - asmlinkage() - if ((probefunc() == "old_mmap") || (probefunc() == "SyS_s390_old_mmap")) - argstr = get_mmap_args(pointer_arg(1)) - else - argstr = get_32mmap_args(pointer_arg(1)) -} -probe nd_syscall.mmap.return = kprobe.function("old_mmap").return ?, - kprobe.function("old32_mmap").return ?, - kprobe.function("SyS_s390_old_mmap").return ? -{ - name = "mmap" - retstr = returnstr(2) -} - -# mmap2 _________________________________________________ -# -# long sys_mmap2(struct mmap_arg_struct __user *arg) -# long sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg) -# -probe nd_syscall.mmap2 = kprobe.function("sys_mmap2") ?, - kprobe.function("sys32_mmap2") ?, - kprobe.function("SyS_mmap2") ? -{ - name = "mmap2" - - // if ((probefunc() == "sys_mmap2") || (probefunc() == "SyS_mmap2")) - // argstr = get_mmap_args($arg) - // else - // argstr = get_32mmap_args($arg) - - asmlinkage() - if ((probefunc() == "sys_mmap2") || (probefunc() == "SyS_mmap2")) - argstr = get_mmap_args(pointer_arg(1)) - else - argstr = get_32mmap_args(pointer_arg(1)) -} - -probe nd_syscall.mmap2.return = kprobe.function("sys_mmap2").return ?, - kprobe.function("sys32_mmap2").return ?, - kprobe.function("SyS_mmap2").return ? -{ - name = "mmap2" - retstr = returnstr(2) -} - -# sysctl _____________________________________________________ -# -# long sys32_sysctl(struct __sysctl_args32 __user *args) -# -probe nd_syscall.sysctl32 = kprobe.function("sys32_sysctl") ? -{ - name = "sysctl" - // argstr = sprintf("%p", $args) - asmlinkage() - argstr = sprintf("%p", pointer_arg(1)) -} -probe nd_syscall.sysctl32.return = kprobe.function("sys32_sysctl").return ? -{ - name = "sysctl" - retstr = returnstr(1) -} - -/* compat */ -function get_32mmap_args:string (args:long) -%{ /* pure */ - struct mmap_arg_struct_emu31 { - u32 addr; - u32 len; - u32 prot; - u32 flags; - u32 fd; - u32 offset; - }a; - - - char proto[60]; - char flags[256]; - - if(_stp_copy_from_user((char *)&a, - (char *)THIS->args, sizeof(a))== 0){ - - /* _mprotect_prot_str */ - proto[0] = '\0'; - if(a.prot){ - if(a.prot & 1) strcat (proto, "PROT_READ|"); - if(a.prot & 2) strcat (proto, "PROT_WRITE|"); - if(a.prot & 4) strcat (proto, "PROT_EXEC|"); - } else { - strcat (proto, "PROT_NONE"); - } - if (proto[0] != '\0') proto[strlen(proto)-1] = '\0'; - - /* _mmap_flags */ - flags[0]='\0'; - if (a.flags & 1) strcat (flags, "MAP_SHARED|"); - if (a.flags & 2) strcat (flags, "MAP_PRIVATE|"); - if (a.flags & 0x10) strcat (flags, "MAP_FIXED|"); - if (a.flags & 0x20) strcat (flags, "MAP_ANONYMOUS|"); - if (a.flags & 0x100) strcat (flags, "MAP_GROWSDOWN|"); - if (a.flags & 0x800) strcat (flags, "MAP_DENYWRITE|"); - if (a.flags & 0x1000) strcat (flags, "MAP_EXECUTABLE|"); - if (a.flags & 0x2000) strcat (flags, "MAP_LOCKED|"); - if (a.flags & 0x4000) strcat (flags, "MAP_NORESERVE|"); - if (a.flags & 0x8000) strcat (flags, "MAP_POPULATE|"); - if (a.flags & 0x10000) strcat (flags, "MAP_NONBLOCK|"); - if (flags[0] != '\0') flags[strlen(flags)-1] = '\0'; - - sprintf(THIS->__retvalue,"0x%x, %d, %s, %s, %d, %d", - a.addr, - a.len, - proto, - flags, - a.fd, - a.offset); - }else{ - strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN); - } -%} - -%) diff --git a/tapset/s390x/registers.stp b/tapset/s390x/registers.stp deleted file mode 100644 index 79482b73..00000000 --- a/tapset/s390x/registers.stp +++ /dev/null @@ -1,221 +0,0 @@ -/* Dwarfless register access for s390x */ - -global _reg_offsets, _stp_regs_registered - -function _stp_register_regs() { - /* Same order as pt_regs */ - _reg_offsets["args"] = 0 - _reg_offsets["psw.mask"] = 8 - _reg_offsets["psw.addr"] = 16 - _reg_offsets["r0"] = 24 - _reg_offsets["r1"] = 32 - _reg_offsets["r2"] = 40 - _reg_offsets["r3"] = 48 - _reg_offsets["r4"] = 56 - _reg_offsets["r5"] = 64 - _reg_offsets["r6"] = 72 - _reg_offsets["r7"] = 80 - _reg_offsets["r8"] = 88 - _reg_offsets["r9"] = 96 - _reg_offsets["r10"] = 104 - _reg_offsets["r11"] = 112 - _reg_offsets["r12"] = 120 - _reg_offsets["r13"] = 128 - _reg_offsets["r14"] = 136 - _reg_offsets["r15"] = 144 - - _reg_offsets["orig_gpr2"] = 152 - _reg_offsets["ilc"] = 160 - _reg_offsets["trap"] = 162 - - /* - * If we ever need to support s390 (31-bit arch), we can - * get to the register offsets by using just a - * reg32_offset = _reg_offsets["reg"]/2 - * or somesuch - */ - _stp_regs_registered = 1 -} - - -/* - * Though the flag says 31bit, asm-s390/thread_info.h comment - * says "32bit process" - */ -function probing_32bit_app() %{ /* pure */ - if (CONTEXT->regs) - THIS->__retvalue = (user_mode(CONTEXT->regs) && - test_tsk_thread_flag(current, TIF_31BIT)); - else - THIS->__retvalue = 0; -%} - -function _stp_probing_kernel: long () %{ /* pure */ - THIS->__retvalue = !user_mode(CONTEXT->regs); -%} - -function _stp_get_register_by_offset:long (offset:long) %{ /* pure */ - long value; - if (!CONTEXT->regs) { - CONTEXT->last_error = "No registers available in this context"; - return; - } - if (THIS->offset < 0 || THIS->offset > sizeof(struct pt_regs) - sizeof(unsigned short)) { - snprintf(CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), - "Bad register offset: %lld", THIS->offset); - CONTEXT->last_error = CONTEXT->error_buffer; - return; - } - - if (THIS->offset < sizeof(struct pt_regs) - 2 * sizeof(unsigned short)) - memcpy(&value, ((char *)CONTEXT->regs) + THIS->offset, - sizeof(value)); - else { - /* ilc or trap */ - unsigned short us_value; - memcpy(&us_value, ((char *)CONTEXT->regs) + THIS->offset, - sizeof(us_value)); - value = us_value; // not sign-extended - } - THIS->__retvalue = value; -%} - -function _stp_sign_extend32:long (value:long) { - if (value & 0x80000000) - value |= (0xffffffff << 32) - return value -} - -function _stp_register:long (name:string, sign_extend:long) { - if (!registers_valid()) { - error("cannot access CPU registers in this context") - return 0 - } - if (!_stp_regs_registered) - _stp_register_regs() - offset = _reg_offsets[name] - if (offset == 0 && !(name in _reg_offsets)) { - error("Unknown register: " . name) - return 0 - } - value = _stp_get_register_by_offset(offset) - if (probing_32bit_app()) { - if (sign_extend) - value = _stp_sign_extend32(value) - else - value &= 0xffffffff - } - return value -} - -/* Return the named register value as a signed value. */ -function register:long (name:string) { - return _stp_register(name, 1) -} - -/* - * Return the named register value as an unsigned value. Specifically, - * don't sign-extend the register value when promoting it to 64 bits. - */ -function u_register:long (name:string) { - return _stp_register(name, 0) -} - -/* - * Return the value of function arg #argnum (1=first arg). - * If truncate=1, mask off the top 32 bits. - * If sign_extend=1 and (truncate=1 or the probepoint we've hit is in a - * 32-bit app), sign-extend the 32-bit value. - * - * We don't yet support extracting arg #6 and beyond, which are passed - * on stack - */ -function _stp_arg:long (argnum:long, sign_extend:long, truncate:long) { - val = 0 - if (argnum < 1 || argnum > 5) { - error(sprintf("Cannot access arg(%d)", argnum)) - return 0 - } - - if (argnum == 1) - val = u_register("r2") - else if (argnum == 2) - val = u_register("r3") - else if (argnum == 3) - val = u_register("r4") - else if (argnum == 4) - val = u_register("r5") - else (argnum == 5) - val = u_register("r6") - - if (truncate) { - if (sign_extend) - val = _stp_sign_extend32(val) - else - /* High bits may be garbage. */ - val = (val & 0xffffffff); - } - return val; -} - -/* Return the value of function arg #argnum (1=first arg) as a signed int. */ -function int_arg:long (argnum:long) { - return _stp_arg(argnum, 1, 1) -} - -/* Return the value of function arg #argnum (1=first arg) as an unsigned int. */ -function uint_arg:long (argnum:long) { - return _stp_arg(argnum, 0, 1) -} - -function long_arg:long (argnum:long) { - return _stp_arg(argnum, 1, 0) -} - -function ulong_arg:long (argnum:long) { - return _stp_arg(argnum, 0, 0) -} - -function longlong_arg:long (argnum:long) { - if (probing_32bit_app()) { - /* TODO verify if this is correct for 31bit apps */ - highbits = _stp_arg(argnum, 0, 1) - lowbits = _stp_arg(argnum+1, 0, 1) - return ((highbits << 32) | lowbits) - } else - return _stp_arg(argnum, 0, 0) -} - -function ulonglong_arg:long (argnum:long) { - return longlong_arg(argnum) -} - -function pointer_arg:long (argnum:long) { - return _stp_arg(argnum, 0, 0) -} - -function s32_arg:long (argnum:long) { - return int_arg(argnum) -} - -function u32_arg:long (argnum:long) { - return uint_arg(argnum) -} - -function s64_arg:long (argnum:long) { - return longlong_arg(argnum) -} - -function u64_arg:long (argnum:long) { - return ulonglong_arg(argnum) -} - -function asmlinkage() %{ /* pure */ %} - -function fastcall() %{ /* pure */ %} - -function regparm() %{ - snprintf(CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), - "regparm is invalid on s390."); - CONTEXT->last_error = CONTEXT->error_buffer; -%} diff --git a/tapset/s390x/syscalls.stp b/tapset/s390x/syscalls.stp deleted file mode 100644 index 94e07adf..00000000 --- a/tapset/s390x/syscalls.stp +++ /dev/null @@ -1,169 +0,0 @@ -# S390-specific system calls - -%(arch == "s390x" %? - -# getresgid __________________________________________________ -# long sys32_getresgid16(u16 __user *rgid, u16 __user *egid, u16 __user *sgid) -# -probe syscall.getresgid16 = kernel.function("sys32_getresgid16") ? -{ - name = "getresgid" - argstr = sprintf("%p, %p, %p", $rgid, $egid, $sgid) -} -probe syscall.getresgid16.return = kernel.function("sys32_getresgid16").return ? -{ - name = "getresgid" - retstr = returnstr(1) -} -# getresuid __________________________________________________ -# long sys32_getresuid16(u16 __user *ruid, u16 __user *euid, u16 __user *suid) -# -probe syscall.getresuid16 = kernel.function("sys32_getresuid16") ? -{ - name = "getresuid" - argstr = sprintf("%p, %p, %p", $ruid, $euid, $suid) -} -probe syscall.getresuid16.return = kernel.function("sys32_getresuid16").return ? -{ - name = "getresuid" - retstr = returnstr(1) -} - -# ipc _________________________________________________ -# long sys32_ipc(u32 call, int first, int second, int third, u32 ptr) -# -probe syscall.ipc = kernel.function("sys32_ipc") ? -{ - name = "ipc" - argstr = sprintf("%d, %d, %d, %d, %p", $call, $first, $second, $third, $ptr) -} -probe syscall.ipc.return = kernel.function("sys_ipc").return ? -{ - name = "ipc" - retstr = returnstr(1) -} - -# mmap _________________________________________________ -# long old_mmap(struct mmap_arg_struct __user *arg) -# long old32_mmap(struct mmap_arg_struct_emu31 __user *arg) -# -probe syscall.mmap = kernel.function("old_mmap") ?, - kernel.function("old32_mmap") ?, - kernel.function("SyS_s390_old_mmap") ? -{ - name = "mmap" - - if ((probefunc() == "old_mmap") || (probefunc() == "SyS_s390_old_mmap")) - argstr = get_mmap_args($arg) - else - argstr = get_32mmap_args($arg) -} - -probe syscall.mmap.return = kernel.function("old_mmap").return ?, - kernel.function("old32_mmap").return ?, - kernel.function("SyS_s390_old_mmap").return ? -{ - name = "mmap" - retstr = returnstr(2) -} - - -# mmap2 _________________________________________________ -# -# long sys_mmap2(struct mmap_arg_struct __user *arg) -# long sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg) -# -probe syscall.mmap2 = kernel.function("sys_mmap2") ?, - kernel.function("sys32_mmap2") ?, - kernel.function("SyS_mmap2") ? -{ - name = "mmap2" - - if ((probefunc() == "sys_mmap2") || (probefunc() == "SyS_mmap2")) - argstr = get_mmap_args($arg) - else - argstr = get_32mmap_args($arg) -} - -probe syscall.mmap2.return = kernel.function("sys_mmap2").return ?, - kernel.function("sys32_mmap2").return ?, - kernel.function("SyS_mmap2").return ? -{ - name = "mmap2" - retstr = returnstr(2) -} - -# sysctl _____________________________________________________ -# -# long sys32_sysctl(struct __sysctl_args32 __user *args) -# -probe syscall.sysctl32 = kernel.function("sys32_sysctl") ? -{ - name = "sysctl" - argstr = sprintf("%p", $args) -} -probe syscall.sysctl32.return = kernel.function("sys32_sysctl").return ? -{ - name = "sysctl" - retstr = returnstr(1) -} - - -/* compat */ -function get_32mmap_args:string (args:long) -%{ /* pure */ - struct mmap_arg_struct_emu31 { - u32 addr; - u32 len; - u32 prot; - u32 flags; - u32 fd; - u32 offset; - }a; - - - char proto[60]; - char flags[256]; - - if(_stp_copy_from_user((char *)&a, - (char *)THIS->args, sizeof(a))== 0){ - - /* _mprotect_prot_str */ - proto[0] = '\0'; - if(a.prot){ - if(a.prot & 1) strcat (proto, "PROT_READ|"); - if(a.prot & 2) strcat (proto, "PROT_WRITE|"); - if(a.prot & 4) strcat (proto, "PROT_EXEC|"); - } else { - strcat (proto, "PROT_NONE"); - } - if (proto[0] != '\0') proto[strlen(proto)-1] = '\0'; - - /* _mmap_flags */ - flags[0]='\0'; - if (a.flags & 1) strcat (flags, "MAP_SHARED|"); - if (a.flags & 2) strcat (flags, "MAP_PRIVATE|"); - if (a.flags & 0x10) strcat (flags, "MAP_FIXED|"); - if (a.flags & 0x20) strcat (flags, "MAP_ANONYMOUS|"); - if (a.flags & 0x100) strcat (flags, "MAP_GROWSDOWN|"); - if (a.flags & 0x800) strcat (flags, "MAP_DENYWRITE|"); - if (a.flags & 0x1000) strcat (flags, "MAP_EXECUTABLE|"); - if (a.flags & 0x2000) strcat (flags, "MAP_LOCKED|"); - if (a.flags & 0x4000) strcat (flags, "MAP_NORESERVE|"); - if (a.flags & 0x8000) strcat (flags, "MAP_POPULATE|"); - if (a.flags & 0x10000) strcat (flags, "MAP_NONBLOCK|"); - if (flags[0] != '\0') flags[strlen(flags)-1] = '\0'; - - sprintf(THIS->__retvalue,"0x%x, %d, %s, %s, %d, %d", - a.addr, - a.len, - proto, - flags, - a.fd, - a.offset); - }else{ - strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN); - } -%} - -%) diff --git a/tapset/scheduler.stp b/tapset/scheduler.stp index 55e230c2..45ddbb04 100644 --- a/tapset/scheduler.stp +++ b/tapset/scheduler.stp @@ -131,7 +131,7 @@ probe scheduler.ctxswitch = kernel.function("context_switch") %) { -%( arch == "ppc64" %? +%( arch == "powerpc" %? prev_pid = $prev->pid next_pid = $new->pid prev_task = $prev diff --git a/tapset/syscalls2.stp b/tapset/syscalls2.stp index e97082c7..defc50a0 100644 --- a/tapset/syscalls2.stp +++ b/tapset/syscalls2.stp @@ -567,7 +567,7 @@ probe syscall.pwrite32 = kernel.function("sys32_pwrite64") ? buf_uaddr = $buf count = $count offset = ($poshi << 32) + $poslo -%( arch == "s390x" %? +%( arch == "s390" %? buf_uaddr = $ubuf argstr = sprintf("%d, %s, %d, %d", $fd, text_strn(user_string($ubuf), syscall_string_trunc, 1), @@ -740,7 +740,7 @@ probe syscall.readv = kernel.function("compat_sys_readv") ?, vector_uaddr = $vec count = $vlen /* FIXME: RHEL4 U3 ppc64 can't resolve $fd */ -%( arch != "ppc64" %? +%( arch != "powerpc" %? fd = $fd argstr = sprintf("%d, %p, %d", $fd, $vec, $vlen) %: @@ -3696,7 +3696,7 @@ probe syscall.writev = kernel.function("compat_sys_writev") ?, vector_uaddr = $vec count = $vlen /* FIXME: RHEL4 U3 ppc64 can't resolve $fd */ -%( arch != "ppc64" %? +%( arch != "powerpc" %? fd = $fd argstr = sprintf("%d, %p, %d", $fd, $vec, $vlen) %: -- cgit