]> sourceware.org Git - systemtap.git/blame - tapset/linux/s390/nd_syscalls.stp
Align nd_syscall.mmap* and syscall.mmap* convenience vars lists.
[systemtap.git] / tapset / linux / s390 / nd_syscalls.stp
CommitLineData
987a37e7
JS
1# S390-specific system calls
2
d27e6fd5 3%(arch == "s390" %?
987a37e7
JS
4
5# getresgid __________________________________________________
6# long sys32_getresgid16(u16 __user *rgid, u16 __user *egid, u16 __user *sgid)
7#
8probe nd_syscall.getresgid16 = kprobe.function("sys32_getresgid16") ?
9{
10 name = "getresgid"
987a37e7 11 asmlinkage()
eb73b74a
MC
12 rgid_uaddr = pointer_arg(1)
13 egid_uaddr = pointer_arg(2)
14 sgid_uaddr = pointer_arg(3)
15 argstr = sprintf("%p, %p, %p", rgid_uaddr, egid_uaddr, sgid_uaddr)
987a37e7
JS
16}
17probe nd_syscall.getresgid16.return = kprobe.function("sys32_getresgid16").return ?
18{
19 name = "getresgid"
20 retstr = returnstr(1)
21}
22
23# getresuid __________________________________________________
24# long sys32_getresuid16(u16 __user *ruid, u16 __user *euid, u16 __user *suid)
25#
26probe nd_syscall.getresuid16 = kprobe.function("sys32_getresuid16") ?
27{
28 name = "getresuid"
987a37e7 29 asmlinkage()
eb73b74a
MC
30 ruid_uaddr = pointer_arg(1)
31 euid_uaddr = pointer_arg(2)
32 suid_uaddr = pointer_arg(3)
33 argstr = sprintf("%p, %p, %p", ruid_uaddr, euid_uaddr, suid_uaddr)
987a37e7
JS
34}
35probe nd_syscall.getresuid16.return = kprobe.function("sys32_getresuid16").return ?
36{
37 name = "getresuid"
38 retstr = returnstr(1)
39}
40
dbca0eed 41%( systemtap_v < "2.7" %?
dc7bb409
DS
42# sys32_ipc() is just a syscall multiplexer (similar to
43# sys_socketcall()). So, we don't really need to probe it, since we'll
44# be probing what sys32_ipc() will call (semget, msgsnd, msgrcv,
45# shmat, etc.).
46
987a37e7
JS
47# ipc _________________________________________________
48# long sys32_ipc(u32 call, int first, int second, int third, u32 ptr)
49#
50probe nd_syscall.ipc = kprobe.function("sys32_ipc") ?
51{
52 name = "ipc"
53 // argstr = sprintf("%d, %d, %d, %d, %p", $call, $first, $second, $third, $ptr)
54 asmlinkage()
55 argstr = sprintf("%d, %d, %d, %d, %p", uint_arg(1), int_arg(2), int_arg(3), int_arg(4), uint_arg(5))
56}
dc7bb409 57probe nd_syscall.ipc.return = kprobe.function("sys32_ipc").return ?
987a37e7
JS
58{
59 name = "ipc"
60 retstr = returnstr(1)
61}
dc7bb409 62%)
987a37e7 63
701af3b7
DS
64# In kernels < 2.6.33, mmap()/mmap2() was handled by arch-specific
65# code. In kernels >= 2.6.33, the arch-specific code just calls
66# generic sys_mmap_pgoff().
67%( kernel_v < "2.6.33" %?
987a37e7
JS
68# mmap _________________________________________________
69# long old_mmap(struct mmap_arg_struct __user *arg)
70# long old32_mmap(struct mmap_arg_struct_emu31 __user *arg)
71#
6ebb905e 72probe nd_syscall.mmap = __nd_syscall.mmap ?, __nd_syscall.mmap32 ?
987a37e7
JS
73{
74 name = "mmap"
c88409ef
MC
75 argstr = sprintf("%p, %u, %s, %s, %d, %d", start, len,
76 _mprotect_prot_str(prot), _mmap_flags(flags),
77 fd, offset)
93fb14d6
DS
78}
79probe __nd_syscall.mmap = kprobe.function("old_mmap") ?,
80 kprobe.function("SyS_s390_old_mmap") ?
81{
93fb14d6 82 asmlinkage()
c88409ef
MC
83 __args = &@cast(pointer_arg(1), "ulong", "kernel<linux/types.h>")
84 start = user_ulong(&(__args)[0])
85 len = user_ulong(&(__args)[1])
86 prot = user_ulong(&(__args)[2])
87 flags = user_ulong(&(__args)[3])
88 fd = user_long(&(__args)[4])
89 offset = user_ulong(&(__args)[5])
93fb14d6 90}
6ebb905e 91probe __nd_syscall.mmap32 = kprobe.function("old32_mmap")
93fb14d6 92{
987a37e7 93 asmlinkage()
c88409ef
MC
94 __args = &@cast(pointer_arg(1), "unsigned int", "kernel<linux/types.h>")
95 start = user_uint32(&(__args)[0])
96 len = user_uint32(&(__args)[1])
97 prot = user_uint32(&(__args)[2])
98 flags = user_uint32(&(__args)[3])
99 fd = user_int(&(__args)[4])
100 offset = user_uint32(&(__args)[5])
987a37e7
JS
101}
102probe nd_syscall.mmap.return = kprobe.function("old_mmap").return ?,
103 kprobe.function("old32_mmap").return ?,
104 kprobe.function("SyS_s390_old_mmap").return ?
105{
106 name = "mmap"
107 retstr = returnstr(2)
108}
109
110# mmap2 _________________________________________________
111#
112# long sys_mmap2(struct mmap_arg_struct __user *arg)
113# long sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg)
114#
6ebb905e 115probe nd_syscall.mmap2 = __nd_syscall.mmap2 ?, __nd_syscall.mmap2_32 ?
987a37e7
JS
116{
117 name = "mmap2"
c88409ef
MC
118 argstr = sprintf("%p, %u, %s, %s, %d, %d", start, length,
119 _mprotect_prot_str(prot), _mmap_flags(flags),
120 fd, pgoffset)
93fb14d6 121}
6ebb905e 122probe __nd_syscall.mmap2 = kprobe.function("sys_mmap2")
93fb14d6 123{
93fb14d6 124 asmlinkage()
c88409ef
MC
125 __args = &@cast(pointer_arg(1), "ulong", "kernel<linux/types.h>")
126 start = user_ulong(&(__args)[0])
127 length = user_ulong(&(__args)[1])
128 prot = user_ulong(&(__args)[2])
129 flags = user_ulong(&(__args)[3])
130 fd = user_long(&(__args)[4])
131 pgoffset = user_ulong(&(__args)[5])
93fb14d6 132}
6ebb905e 133probe __nd_syscall.mmap2_32 = kprobe.function("sys32_mmap2")
93fb14d6 134{
987a37e7 135 asmlinkage()
c88409ef
MC
136 __args = &@cast(pointer_arg(1), "unsigned int", "kernel<linux/types.h>")
137 start = user_uint32(&(__args)[0])
138 length = user_uint32(&(__args)[1])
139 prot = user_uint32(&(__args)[2])
140 flags = user_uint32(&(__args)[3])
141 fd = user_int(&(__args)[4])
142 pgoffset = user_uint32(&(__args)[5])
987a37e7
JS
143}
144
145probe nd_syscall.mmap2.return = kprobe.function("sys_mmap2").return ?,
669853f7 146 kprobe.function("sys32_mmap2").return ?
987a37e7
JS
147{
148 name = "mmap2"
149 retstr = returnstr(2)
150}
701af3b7 151%)
987a37e7 152
2499f5ea 153%( CONFIG_GENERIC_SIGALTSTACK == "n" || kernel_v < "3.8" %?
09228299
DS
154# sigaltstack ________________________________________________
155# asmlinkage long
156# sys_sigaltstack(const stack_t __user * uss, stack_t __user *uoss)
157#
158# NOTE: args vary between archs.
159probe nd_syscall.sigaltstack = kprobe.function("sys_sigaltstack")
160{
161 name = "sigaltstack"
09228299
DS
162 asmlinkage()
163 uss_uaddr = pointer_arg(1)
164 uoss_uaddr = pointer_arg(2)
2e139074 165%(systemtap_v < "2.3" %?
704c2b5d 166 regs = %{ /* pure */ _stp_current_pt_regs() %}
09228299 167%)
258cf69f 168 argstr = sprintf("%s, %p", _stp_sigaltstack_u(uss_uaddr), uoss_uaddr)
09228299
DS
169}
170probe nd_syscall.sigaltstack.return = kprobe.function("sys_sigaltstack").return
171{
172 name = "sigaltstack"
173 retstr = returnstr(1)
174}
09228299
DS
175
176# sys32_sigaltstack ________________________________________________
177# asmlinkage long
178# sys32_sigaltstack(const stack_t32 __user *uss, stack_t32 __user *uoss)
179#
180# NOTE: args vary between archs.
181probe nd_syscall.sys32_sigaltstack = kprobe.function("sys32_sigaltstack") ?
182{
258cf69f
DS
183 name = "sigaltstack"
184 asmlinkage()
185 uss_uaddr = pointer_arg(1)
186 uoss_uaddr = pointer_arg(2)
187 argstr = sprintf("%s, %p", _stp_compat_sigaltstack_u(uss_uaddr),
188 uoss_uaddr)
09228299 189}
258cf69f
DS
190probe nd_syscall.sys32_sigaltstack.return =
191 kprobe.function("sys32_sigaltstack").return ?
09228299 192{
258cf69f 193 name = "sigaltstack"
09228299
DS
194 retstr = returnstr(1)
195}
258cf69f 196%)
09228299 197
987a37e7
JS
198# sysctl _____________________________________________________
199#
200# long sys32_sysctl(struct __sysctl_args32 __user *args)
201#
202probe nd_syscall.sysctl32 = kprobe.function("sys32_sysctl") ?
203{
204 name = "sysctl"
205 // argstr = sprintf("%p", $args)
206 asmlinkage()
207 argstr = sprintf("%p", pointer_arg(1))
208}
209probe nd_syscall.sysctl32.return = kprobe.function("sys32_sysctl").return ?
210{
211 name = "sysctl"
212 retstr = returnstr(1)
213}
214
ccde050d
DS
215# ftruncate64 _________________________________________________
216#
217# COMPAT_SYSCALL_DEFINE3(s390_ftruncate64, unsigned int, fd, u32, high,
218# u32, low)
219#
220probe nd_syscall.compat_ftruncate64 = kprobe.function("sys32_ftruncate64") ?
221{
222 asmlinkage()
223 name = "ftruncate"
224 fd = int_arg(1)
225 length = ((uint_arg(2) << 32) | uint_arg(3))
226 argstr = sprintf("%d, %d", fd, length)
227}
228probe nd_syscall.compat_ftruncate64.return =
229 kprobe.function("sys32_ftruncate64").return ?
230{
231 name = "ftruncate"
232 retstr = returnstr(1)
233}
234
235# truncate64 __________________________________________________
236#
237# COMPAT_SYSCALL_DEFINE3(s390_truncate64, const char __user *, path,
238# u32, high, u32, low)
239#
240probe nd_syscall.compat_truncate64 = kprobe.function("sys32_truncate64") ?
241{
242 asmlinkage()
243 name = "truncate"
244 path_uaddr = pointer_arg(1)
245 path = user_string_quoted(path_uaddr)
246 length = ((uint_arg(2) << 32) | uint_arg(3))
247 argstr = sprintf("%s, %d", user_string_quoted(path_uaddr), length)
248}
249probe nd_syscall.compat_truncate64.return =
250 kprobe.function("sys32_truncate64").return ?
251{
252 name = "truncate"
253 retstr = returnstr(1)
254}
255
dd074705
MC
256# readahead __________________________________________________
257#
258# asmlinkage ssize_t
259# compat_ssize_t sys32_readahead(int fd, u32 offhi, u32 offlo, s32 count)
260#
261probe nd_syscall.compat_readahead = kprobe.function("sys32_readahead") ?
262{
263 name = "readahead"
264 asmlinkage()
265 fd = int_arg(1)
266 offset = ((uint_arg(2) << 32) | uint_arg(3))
267 count = ulong_arg(4)
268 argstr = sprintf("%d, %d, %u", fd, offset, count)
269}
270probe nd_syscall.compat_readahead.return = kprobe.function("sys32_readahead").return ?
271{
272 name = "readahead"
273 retstr = returnstr(1)
274}
275
0da3de11
DS
276# fadvise64 _______________________________________________________
277#
278# The following kernel commit:
279#
280# commit 5383d2c8b3ee61a762043818d7c07bbc0049b031
281# Author: Heiko Carstens <heiko.carstens@de.ibm.com>
282# Date: Wed Feb 26 14:40:43 2014 +0100
283#
284# s390/compat: convert to COMPAT_SYSCALL_DEFINEx part 7
285#
286# changed sys32_fadvise64 from:
287#
288# asmlinkage long
289# sys32_fadvise64(int fd, loff_t offset, size_t len, int advise)
290#
291# to:
292#
293# COMPAT_SYSCALL_DEFINE5(s390_fadvise64, int, fd, u32, high, u32, low,
294# compat_size_t, len, int, advise
295probe nd_syscall.compat_fadvise64 = kprobe.function("sys32_fadvise64") ?
296{
297 asmlinkage()
298 name = "fadvise64"
299 fd = int_arg(1)
300%( kernel_v < "3.15" %?
301 # We have to use raw access here since the long long value is
302 # stored in 1 register, not 2 - which longlong_arg() expects.
303 offset = u_register("r3")
304 len = int_arg(3)
305 advice = int_arg(4)
306%:
307 offset = ((uint_arg(2) << 32) | uint_arg(3))
308 len = int_arg(4)
309 advice = int_arg(5)
310%)
311 argstr = sprintf("%d, %d, %d, %s", fd, offset, len,
312 _fadvice_advice_str(advice))
313}
314probe nd_syscall.compat_fadvise64.return =
315 kprobe.function("sys32_fadvise64").return ?
316{
317 name = "fadvise64"
318 retstr = returnstr(1)
319}
320
321
322# fadvise64_64 __________________________________________________
323#
324# COMPAT_SYSCALL_DEFINE1(s390_fadvise64_64,
325# struct fadvise64_64_args __user *, args)
326# struct fadvise64_64_args {
327# int fd;
328# long long offset;
329# long long len;
330# int advice;
331#};
332
333probe nd_syscall.compat_fadvise64_64 = kprobe.function("sys32_fadvise64_64") ?
334{
335 name = "fadvise64"
336 __args = &@cast(pointer_arg(1), "unsigned int", "kernel<linux/types.h>")
337 fd = user_int(&(__args)[0])
338 offset = user_int64(&(__args)[2])
339 len = user_uint64(&(__args)[4])
340 advice = user_int(&(__args)[6])
341 argstr = sprintf("%d, %d, %d, %s", fd, offset, len,
342 _fadvice_advice_str(advice))
343}
344probe nd_syscall.compat_fadvise64_64.return =
345 kprobe.function("sys32_fadvise64_64").return ?
346{
347 name = "fadvise64"
348 retstr = returnstr(1)
349}
350
ad37e6fe
DS
351# fallocate __________________________________________________
352#
353# SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len)
354# asmlinkage long sys32_fallocate(int fd, int mode, unsigned offset_lo,
355# unsigned offset_hi, unsigned len_lo,
356# unsigned len_hi)
357#
358# We've got a problem here on RHEL6 (2.6.32-504.el6.s390x) and RHEL7
359# (3.10.0-229.el7.s390x). If we probe the real syscall (sys_fallocate)
360# and call longlong_arg(N), systemtap knows this is a compat task and
361# tries to get the long long from 2 different registers. However, by
362# the time we get to sys_fallocate(), the 64-bit value has been put
363# into one register.
364#
365# Normally we'd probe the "compat" version of the function to get the
366# raw values. However, on those kernels, the compat wrapper for
367# fallocate (sys_fallocate_wrapper) is in assembly language, which
368# stap can't find.
369#
370# So, we'll probe the "real" syscall here, and grab the "raw" register
371# values.
372probe nd_syscall.compat_fallocate = kprobe.function("sys_fallocate") ?
373{
374 asmlinkage()
375 name = "fallocate"
376
377 fd = int_arg(1)
378 mode = int_arg(2)
379 # This logic is stolen from _stp_arg (in
380 # tapset/s390/registers.stp).
eb73b74a 381 mode_str = _stp_fallocate_mode_str(mode)
ad37e6fe
DS
382 offset = u_register("r4")
383 len = u_register("r5")
5d9828b7 384 argstr = sprintf("%d, %s, %#x, %u", fd, mode_str, offset, len)
ad37e6fe
DS
385}
386probe nd_syscall.compat_fallocate.return =
387 kprobe.function("sys_fallocate").return ?
388{
389 name = "fallocate"
390 retstr = returnstr(1)
391}
392
bf952a76
DS
393%( kernel_v < "3.7" %?
394# execve _____________________________________________________
395#
396# In kernels < 3.7, sys_execve() was in arch-specific code (and had
397# varying arguments). It was just a wrapper around generic
398# do_execve(), but the wrapper could error out before calling
399# do_execve(). So, we'll have to handle it in arch-specific tapset
400# code to catch all calls.
401#
402# asmlinkage long sys_execve(struct pt_regs regs)
403# SYSCALL_DEFINE3(execve, char __user *, name, char __user * __user *, argv,
404# char __user * __user *, envp)
405probe nd_syscall.execve = kprobe.function("sys_execve")
406{
407 name = "execve"
408%( kernel_v < "2.6.32" %?
409 __regs = &@cast(ulong_arg(1), "pt_regs", "kernel<asm/ptrace.h>")
410 filename = user_string_quoted(__regs->orig_gpr2)
411 args = __get_argv(__regs->gprs[3], 0)
8ae749be 412 env_str = __count_envp(__regs->gprs[4])
bf952a76
DS
413%:
414 filename = user_string_quoted(pointer_arg(1))
415 args = __get_argv(pointer_arg(2), 0)
8ae749be 416 env_str = __count_envp(pointer_arg(3))
bf952a76
DS
417%)
418 argstr = sprintf("%s, %s, %s", filename, args, env_str)
419}
420probe nd_syscall.execve.return = kprobe.function("sys_execve").return
421{
422 name = "execve"
423 retstr = returnstr(1)
424}
425
426# execve _____________________________________________________
427#
428# asmlinkage long sys32_execve(struct pt_regs regs)
429# asmlinkage long sys32_execve(char __user *name, compat_uptr_t __user *argv,
430# compat_uptr_t __user *envp)
431probe nd_syscall.compat_execve = kprobe.function("sys32_execve") ?
432{
433 asmlinkage()
434 name = "execve"
435%( kernel_v < "2.6.32" %?
436 __regs = &@cast(ulong_arg(1), "pt_regs", "kernel<asm/ptrace.h>")
437 filename = user_string_quoted(__regs->orig_gpr2 & 0x7fffffff)
438 args = __get_compat_argv(__regs->gprs[3] & 0x7fffffff, 0)
8ae749be 439 env_str = __count_compat_envp(__regs->gprs[4] & 0x7fffffff)
bf952a76
DS
440%:
441 filename = user_string_quoted(pointer_arg(1))
442 args = __get_compat_argv(pointer_arg(2), 0)
8ae749be 443 env_str = __count_compat_envp(pointer_arg(3))
bf952a76
DS
444%)
445 argstr = sprintf("%s, %s, %s", filename, args, env_str)
446}
447probe nd_syscall.compat_execve.return =
448 kprobe.function("sys32_execve").return ?
449{
450 name = "execve"
451 retstr = returnstr(1)
452}
453%)
d82aac45
MC
454
455# lookup_dcookie _____________________________________________
456# rhel7: COMPAT_SYSCALL_DEFINE4(lookup_dcookie, u32, w0, u32, w1, char __user *,
457# buf, compat_size_t, len)
458# rhel[56]: kprobe.function("sys32_lookup_dcookie_wrapper")
459#
460probe nd_syscall.compat_lookup_dcookie =
461 kprobe.function("compat_sys_lookup_dcookie") ?,
462 kprobe.function("sys32_lookup_dcookie_wrapper") ?
463{
464 name = "lookup_dcookie"
465 asmlinkage()
466 cookie = ((uint_arg(1) << 32) | uint_arg(2))
467 buffer_uaddr = pointer_arg(3)
468 len = ulong_arg(4)
469 argstr = sprintf("%#lx, %p, %#x", cookie, buffer_uaddr, len)
470}
471probe nd_syscall.compat_lookup_dcookie.return =
472 kprobe.function("compat_sys_lookup_dcookie").return ?,
473 kprobe.function("sys32_lookup_dcookie_wrapper").return ?
474{
475 name = "lookup_dcookie"
476 retstr = returnstr(1)
477}
478
987a37e7 479%)
This page took 0.1891 seconds and 5 git commands to generate.