Commit | Line | Data |
---|---|---|
519dfeaf JO |
1 | // SPDX-License-Identifier: GPL-2.0 |
2 | ||
3 | #include <stdio.h> | |
4 | #include <string.h> | |
4cde2d8a | 5 | #include <sdt.h> |
519dfeaf JO |
6 | |
7 | #define __PASTE(a, b) a##b | |
8 | #define PASTE(a, b) __PASTE(a, b) | |
9 | ||
10 | #define NAME(name, idx) PASTE(name, idx) | |
11 | ||
623bdd58 | 12 | #define DEF(name, idx) int __attribute__((weak)) NAME(name, idx)(void) { return 0; } |
519dfeaf JO |
13 | #define CALL(name, idx) NAME(name, idx)(); |
14 | ||
15 | #define F(body, name, idx) body(name, idx) | |
16 | ||
17 | #define F10(body, name, idx) \ | |
18 | F(body, PASTE(name, idx), 0) F(body, PASTE(name, idx), 1) F(body, PASTE(name, idx), 2) \ | |
19 | F(body, PASTE(name, idx), 3) F(body, PASTE(name, idx), 4) F(body, PASTE(name, idx), 5) \ | |
20 | F(body, PASTE(name, idx), 6) F(body, PASTE(name, idx), 7) F(body, PASTE(name, idx), 8) \ | |
21 | F(body, PASTE(name, idx), 9) | |
22 | ||
23 | #define F100(body, name, idx) \ | |
24 | F10(body, PASTE(name, idx), 0) F10(body, PASTE(name, idx), 1) F10(body, PASTE(name, idx), 2) \ | |
25 | F10(body, PASTE(name, idx), 3) F10(body, PASTE(name, idx), 4) F10(body, PASTE(name, idx), 5) \ | |
26 | F10(body, PASTE(name, idx), 6) F10(body, PASTE(name, idx), 7) F10(body, PASTE(name, idx), 8) \ | |
27 | F10(body, PASTE(name, idx), 9) | |
28 | ||
29 | #define F1000(body, name, idx) \ | |
30 | F100(body, PASTE(name, idx), 0) F100(body, PASTE(name, idx), 1) F100(body, PASTE(name, idx), 2) \ | |
31 | F100(body, PASTE(name, idx), 3) F100(body, PASTE(name, idx), 4) F100(body, PASTE(name, idx), 5) \ | |
32 | F100(body, PASTE(name, idx), 6) F100(body, PASTE(name, idx), 7) F100(body, PASTE(name, idx), 8) \ | |
33 | F100(body, PASTE(name, idx), 9) | |
34 | ||
35 | #define F10000(body, name, idx) \ | |
36 | F1000(body, PASTE(name, idx), 0) F1000(body, PASTE(name, idx), 1) F1000(body, PASTE(name, idx), 2) \ | |
37 | F1000(body, PASTE(name, idx), 3) F1000(body, PASTE(name, idx), 4) F1000(body, PASTE(name, idx), 5) \ | |
38 | F1000(body, PASTE(name, idx), 6) F1000(body, PASTE(name, idx), 7) F1000(body, PASTE(name, idx), 8) \ | |
39 | F1000(body, PASTE(name, idx), 9) | |
40 | ||
41 | F10000(DEF, uprobe_multi_func_, 0) | |
42 | F10000(DEF, uprobe_multi_func_, 1) | |
43 | F10000(DEF, uprobe_multi_func_, 2) | |
44 | F10000(DEF, uprobe_multi_func_, 3) | |
45 | F10000(DEF, uprobe_multi_func_, 4) | |
46 | ||
47 | static int bench(void) | |
48 | { | |
49 | F10000(CALL, uprobe_multi_func_, 0) | |
50 | F10000(CALL, uprobe_multi_func_, 1) | |
51 | F10000(CALL, uprobe_multi_func_, 2) | |
52 | F10000(CALL, uprobe_multi_func_, 3) | |
53 | F10000(CALL, uprobe_multi_func_, 4) | |
54 | return 0; | |
55 | } | |
56 | ||
4cde2d8a JO |
57 | #define PROBE STAP_PROBE(test, usdt); |
58 | ||
59 | #define PROBE10 PROBE PROBE PROBE PROBE PROBE \ | |
60 | PROBE PROBE PROBE PROBE PROBE | |
61 | #define PROBE100 PROBE10 PROBE10 PROBE10 PROBE10 PROBE10 \ | |
62 | PROBE10 PROBE10 PROBE10 PROBE10 PROBE10 | |
63 | #define PROBE1000 PROBE100 PROBE100 PROBE100 PROBE100 PROBE100 \ | |
64 | PROBE100 PROBE100 PROBE100 PROBE100 PROBE100 | |
65 | #define PROBE10000 PROBE1000 PROBE1000 PROBE1000 PROBE1000 PROBE1000 \ | |
66 | PROBE1000 PROBE1000 PROBE1000 PROBE1000 PROBE1000 | |
67 | ||
68 | static int usdt(void) | |
69 | { | |
70 | PROBE10000 | |
71 | PROBE10000 | |
72 | PROBE10000 | |
73 | PROBE10000 | |
74 | PROBE10000 | |
75 | return 0; | |
76 | } | |
77 | ||
519dfeaf JO |
78 | int main(int argc, char **argv) |
79 | { | |
80 | if (argc != 2) | |
81 | goto error; | |
82 | ||
83 | if (!strcmp("bench", argv[1])) | |
84 | return bench(); | |
4cde2d8a JO |
85 | if (!strcmp("usdt", argv[1])) |
86 | return usdt(); | |
519dfeaf JO |
87 | |
88 | error: | |
4cde2d8a | 89 | fprintf(stderr, "usage: %s <bench|usdt>\n", argv[0]); |
519dfeaf JO |
90 | return -1; |
91 | } |