File: num_args.stp

package info (click to toggle)
systemtap 2.6-0.2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 21,220 kB
  • ctags: 10,944
  • sloc: cpp: 53,239; ansic: 50,615; exp: 33,694; sh: 9,906; xml: 7,665; perl: 2,089; python: 1,534; tcl: 1,236; makefile: 797; java: 148; lisp: 104; awk: 94; asm: 91; sed: 16
file content (72 lines) | stat: -rw-r--r-- 2,812 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
%( arch == "i386" %? global ir = "eax", lr = "eax" %)
%( arch == "x86_64" %? global ir = "eax", lr = "rax" %)
%( arch == "powerpc" %? global ir = "r3", lr = "r3" %)
%( arch == "s390" %? global ir = "r2", lr = "r2" %)
%( arch == "arm" %? global ir = "r0", lr = "r0" %)

# On s390/s390x, when in a syscall, the 1st argument is in the
# orig_gpr2 register. If you aren't in a syscall, the 1st argument is
# in r2. The s390 *_arg() function assumes we're in a syscall. Since
# we aren't in the testcase, it returns the wrong value. So instead,
# grab the value from r2.

probe module("systemtap-test-module2").function("yyy_int") {
	printf("yyy_int %d %d %d\n",
	       %( arch == "s390" %? register("r2") %: int_arg(1) %),
	      int_arg(2), int_arg(3))
}
probe module("systemtap-test-module2").function("yyy_int").return {
	printf("yyy_int returns %d\n", register(ir))
}
probe module("systemtap-test-module2").function("yyy_uint") {
	printf("yyy_uint %d %d %d\n",
	       %( arch == "s390" %? u_register("r2") %: uint_arg(1) %),
	       uint_arg(2), uint_arg(3))
}
probe module("systemtap-test-module2").function("yyy_uint").return {
	printf("yyy_uint returns %d\n", u_register(ir))
}
probe module("systemtap-test-module2").function("yyy_long") {
	printf("yyy_long %d %d %d\n",
	       %( arch == "s390" %? register("r2") %: long_arg(1) %),
	       long_arg(2), long_arg(3))
}
probe module("systemtap_test-module2").function("yyy_long").return {
	printf("yyy_long returns %d\n", register(lr))
}
probe module("systemtap-test_module2").function("yyy_int64") {
# On i386, kernel is built with -mregparm=3.  The first arg occupies the
# first two registers.  The 2nd arg is not split between the 3rd register
# and the stack, but rather passed entirely on the stack.
	printf("yyy_int64 %d %d %d\n",
%( arch == "i386" %?
	       s64_arg(1), s64_arg(4), s64_arg(6)
%:
	       %( arch == "s390" %? register("r2") %: s64_arg(1) %),
	       s64_arg(2), s64_arg(3)
%)
					)
}
probe module("systemtap_test_module2").function("yyy_int64").return {
	printf("yyy_int64 returns %d\n", register(ir))
}
probe module("systemtap_test_module2").function("yyy_char") {
	printf("yyy_char %1b %1b %1b\n",
	       %( arch == "s390" %? register("r2") %: int_arg(1) %),
	       int_arg(2), int_arg(3))
}
probe module("systemtap_test_module2").function("yyy_char").return {
	printf("yyy_char returns %1b\n", register(ir))
}
probe module("systemtap_test_module2").function("yyy_str") {
	printf("yyy_str %s-%s-%s\n",
	       kernel_string(%( arch == "s390" %? u_register("r2")
				%: pointer_arg(1) %)),
	       kernel_string(pointer_arg(2)), kernel_string(pointer_arg(3)))
}
probe module("systemtap_test_module2").function("yyy_str").return {
	printf("yyy_str returns %s\n", kernel_string(register(lr)))
}
probe begin {
	printf("READY\n")
}