Commit | Line | Data |
---|---|---|
5fee13fd MD |
1 | #!/bin/sh |
2 | ||
3 | # Generate system call probe description macros from syscall metadata dump file. | |
4 | # example usage: | |
25631135 MD |
5 | # |
6 | # lttng-syscalls-generate-headers.sh integers 3.0.4 x86-64-syscalls-3.0.4 | |
7 | # lttng-syscalls-generate-headers.sh pointers 3.0.4 x86-64-syscalls-3.0.4 | |
5fee13fd | 8 | |
25631135 MD |
9 | CLASS=$1 |
10 | INPUTDIR=$2 | |
11 | INPUTFILE=$3 | |
5fee13fd MD |
12 | INPUT=${INPUTDIR}/${INPUTFILE} |
13 | SRCFILE=gen.tmp.0 | |
14 | TMPFILE=gen.tmp.1 | |
15 | ||
16 | cp ${INPUT} ${SRCFILE} | |
17 | ||
18 | #Cleanup | |
19 | sed 's/^\[.*\] //g' ${SRCFILE} > ${TMPFILE} | |
20 | mv ${TMPFILE} ${SRCFILE} | |
21 | ||
22 | sed 's/^syscall sys_\([^ ]*\)/syscall \1/g' ${SRCFILE} > ${TMPFILE} | |
23 | mv ${TMPFILE} ${SRCFILE} | |
24 | ||
25 | #Filter | |
26 | ||
25631135 MD |
27 | if [ "$CLASS" = integers ]; then |
28 | #select integers and no-args. | |
29 | grep -v "\\*\|cap_user_header_t" ${SRCFILE} > ${TMPFILE} | |
30 | mv ${TMPFILE} ${SRCFILE} | |
31 | fi | |
32 | ||
5fee13fd | 33 | |
25631135 MD |
34 | if [ "$CLASS" = pointers ]; then |
35 | #select system calls using pointers. | |
36 | grep "\\*\|cap_#user_header_t" ${SRCFILE} > ${TMPFILE} | |
37 | mv ${TMPFILE} ${SRCFILE} | |
38 | fi | |
5fee13fd | 39 | |
5fee13fd MD |
40 | HEADER=headers/${INPUTFILE}-${CLASS}.h |
41 | ||
42 | echo "/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */" > ${HEADER} | |
43 | ||
44 | echo \ | |
054f2ed3 MD |
45 | "#ifndef CREATE_SYSCALL_TABLE |
46 | ||
47 | #undef TRACE_SYSTEM | |
e41e2e82 | 48 | #define TRACE_SYSTEM syscalls |
5fee13fd | 49 | |
e41e2e82 MD |
50 | #if !defined(_TRACE_SYSCALLS_H) || defined(TRACE_HEADER_MULTI_READ) |
51 | #define _TRACE_SYSCALLS_H | |
5fee13fd MD |
52 | |
53 | #include <linux/tracepoint.h> | |
54 | #include <linux/syscalls.h> | |
55 | " >> ${HEADER} | |
56 | ||
25631135 MD |
57 | if [ "$CLASS" = integers ]; then |
58 | ||
f7bdf4db MD |
59 | NRARGS=0 |
60 | ||
61 | echo \ | |
62 | 'DECLARE_EVENT_CLASS_NOARGS(syscalls_noargs,\n'\ | |
63 | ' TP_STRUCT__entry(),\n'\ | |
64 | ' TP_fast_assign(),\n'\ | |
65 | ' TP_printk()\n'\ | |
66 | ')'\ | |
67 | >> ${HEADER} | |
68 | ||
69 | grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} | |
70 | sed 's/^syscall \([^ ]*\) nr \([^ ]*\) nbargs \([^ ]*\) '\ | |
71 | 'types: (\([^)]*\)) '\ | |
72 | 'args: (\([^)]*\))/'\ | |
73 | 'DEFINE_EVENT_NOARGS(syscalls_noargs, sys_\1)'\ | |
74 | '/g'\ | |
75 | ${TMPFILE} >> ${HEADER} | |
76 | ||
25631135 | 77 | fi |
5fee13fd MD |
78 | |
79 | # types: 4 | |
80 | # args 5 | |
81 | ||
82 | NRARGS=1 | |
83 | grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} | |
84 | sed 's/^syscall \([^ ]*\) nr \([^ ]*\) nbargs \([^ ]*\) '\ | |
85 | 'types: (\([^)]*\)) '\ | |
86 | 'args: (\([^)]*\))/'\ | |
87 | 'TRACE_EVENT(sys_\1,\n'\ | |
88 | ' TP_PROTO(\4 \5),\n'\ | |
89 | ' TP_ARGS(\5),\n'\ | |
90 | ' TP_STRUCT__entry(__field(\4, \5)),\n'\ | |
91 | ' TP_fast_assign(tp_assign(\5, \5)),\n'\ | |
92 | ' TP_printk()\n'\ | |
93 | ')/g'\ | |
94 | ${TMPFILE} >> ${HEADER} | |
95 | ||
96 | # types: 4 5 | |
97 | # args 6 7 | |
98 | ||
99 | NRARGS=2 | |
100 | grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} | |
101 | sed 's/^syscall \([^ ]*\) nr \([^ ]*\) nbargs \([^ ]*\) '\ | |
102 | 'types: (\([^,]*\), \([^)]*\)) '\ | |
103 | 'args: (\([^,]*\), \([^)]*\))/'\ | |
104 | 'TRACE_EVENT(sys_\1,\n'\ | |
105 | ' TP_PROTO(\4 \6, \5 \7),\n'\ | |
106 | ' TP_ARGS(\6, \7),\n'\ | |
107 | ' TP_STRUCT__entry(__field(\4, \6) __field(\5, \7)),\n'\ | |
108 | ' TP_fast_assign(tp_assign(\6, \6) tp_assign(\7, \7)),\n'\ | |
109 | ' TP_printk()\n'\ | |
110 | ')/g'\ | |
111 | ${TMPFILE} >> ${HEADER} | |
112 | ||
113 | # types: 4 5 6 | |
114 | # args 7 8 9 | |
115 | ||
116 | NRARGS=3 | |
117 | grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} | |
118 | sed 's/^syscall \([^ ]*\) nr \([^ ]*\) nbargs \([^ ]*\) '\ | |
119 | 'types: (\([^,]*\), \([^,]*\), \([^)]*\)) '\ | |
120 | 'args: (\([^,]*\), \([^,]*\), \([^)]*\))/'\ | |
121 | 'TRACE_EVENT(sys_\1,\n'\ | |
122 | ' TP_PROTO(\4 \7, \5 \8, \6 \9),\n'\ | |
123 | ' TP_ARGS(\7, \8, \9),\n'\ | |
124 | ' TP_STRUCT__entry(__field(\4, \7) __field(\5, \8) __field(\6, \9)),\n'\ | |
125 | ' TP_fast_assign(tp_assign(\7, \7) tp_assign(\8, \8) tp_assign(\9, \9)),\n'\ | |
126 | ' TP_printk()\n'\ | |
127 | ')/g'\ | |
128 | ${TMPFILE} >> ${HEADER} | |
129 | ||
130 | ||
131 | # types: 4 5 6 7 | |
132 | # args 8 9 10 11 | |
133 | ||
134 | NRARGS=4 | |
135 | grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} | |
136 | sed 's/^syscall \([^ ]*\) nr \([^ ]*\) nbargs \([^ ]*\) '\ | |
137 | 'types: (\([^,]*\), \([^,]*\), \([^,]*\), \([^)]*\)) '\ | |
138 | 'args: (\([^,]*\), \([^,]*\), \([^,]*\), \([^)]*\))/'\ | |
139 | 'TRACE_EVENT(sys_\1,\n'\ | |
140 | ' TP_PROTO(\4 \8, \5 \9, \6 \10, \7 \11),\n'\ | |
141 | ' TP_ARGS(\8, \9, \10, \11),\n'\ | |
142 | ' TP_STRUCT__entry(__field(\4, \8) __field(\5, \9) __field(\6, \10) __field(\7, \11)),\n'\ | |
143 | ' TP_fast_assign(tp_assign(\8, \8) tp_assign(\9, \9) tp_assign(\10, \10) tp_assign(\11, \11)),\n'\ | |
144 | ' TP_printk()\n'\ | |
145 | ')/g'\ | |
146 | ${TMPFILE} >> ${HEADER} | |
147 | ||
148 | # types: 4 5 6 7 8 | |
149 | # args 9 10 11 12 13 | |
150 | ||
151 | NRARGS=5 | |
152 | grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} | |
153 | sed 's/^syscall \([^ ]*\) nr \([^ ]*\) nbargs \([^ ]*\) '\ | |
154 | 'types: (\([^,]*\), \([^,]*\), \([^,]*\), \([^,]*\), \([^)]*\)) '\ | |
155 | 'args: (\([^,]*\), \([^,]*\), \([^,]*\), \([^,]*\), \([^)]*\))/'\ | |
156 | 'TRACE_EVENT(sys_\1,\n'\ | |
157 | ' TP_PROTO(\4 \9, \5 \10, \6 \11, \7 \12, \8 \13),\n'\ | |
158 | ' TP_ARGS(\9, \10, \11, \12, \13),\n'\ | |
159 | ' TP_STRUCT__entry(__field(\4, \9) __field(\5, \10) __field(\6, \11) __field(\7, \12) __field(\8, \13)),\n'\ | |
160 | ' TP_fast_assign(tp_assign(\9, \9) tp_assign(\10, \10) tp_assign(\11, \11) tp_assign(\12, \12) tp_assign(\13, \13)),\n'\ | |
161 | ' TP_printk()\n'\ | |
162 | ')/g'\ | |
163 | ${TMPFILE} >> ${HEADER} | |
164 | ||
165 | ||
166 | # types: 4 5 6 7 8 9 | |
167 | # args 10 11 12 13 14 15 | |
168 | ||
169 | NRARGS=6 | |
170 | grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} | |
171 | sed 's/^syscall \([^ ]*\) nr \([^ ]*\) nbargs \([^ ]*\) '\ | |
172 | 'types: (\([^,]*\), \([^,]*\), \([^,]*\), \([^,]*\), \([^,]*\), \([^)]*\)) '\ | |
173 | 'args: (\([^,]*\), \([^,]*\), \([^,]*\), \([^,]*\), \([^,]*\), \([^)]*\))/'\ | |
174 | 'TRACE_EVENT(sys_\1,\n'\ | |
175 | ' TP_PROTO(\4 \10, \5 \11, \6 \12, \7 \13, \8 \14, \9 \15),\n'\ | |
176 | ' TP_ARGS(\10, \11, \12, \13, \14, \15),\n'\ | |
177 | ' TP_STRUCT__entry(__field(\4, \10) __field(\5, \11) __field(\6, \12) __field(\7, \13) __field(\8, \14) __field(\9, \15)),\n'\ | |
178 | ' TP_fast_assign(tp_assign(\10, \10) tp_assign(\11, \11) tp_assign(\12, 12) tp_assign(\13, \13) tp_assign(\14, \14) tp_assign(\15, \15)),\n'\ | |
179 | ' TP_printk()\n'\ | |
180 | ')/g'\ | |
181 | ${TMPFILE} >> ${HEADER} | |
182 | ||
9b6d7a0c MD |
183 | # Macro for tracing syscall table |
184 | ||
e15b0e20 | 185 | rm -f ${TMPFILE} |
f7bdf4db | 186 | for NRARGS in $(seq 0 6); do |
e15b0e20 MD |
187 | grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} >> ${TMPFILE} |
188 | done | |
189 | ||
054f2ed3 | 190 | echo \ |
5fee13fd | 191 | " |
e41e2e82 | 192 | #endif /* _TRACE_SYSCALLS_H */ |
5fee13fd MD |
193 | |
194 | /* This part must be outside protection */ | |
195 | #include \"../../../probes/define_trace.h\" | |
054f2ed3 MD |
196 | |
197 | #else /* CREATE_SYSCALL_TABLE */ | |
198 | " >> ${HEADER} | |
199 | ||
f7bdf4db MD |
200 | |
201 | NRARGS=0 | |
f7bdf4db | 202 | |
25631135 | 203 | if [ "$CLASS" = integers ]; then |
f7bdf4db | 204 | #noargs |
25631135 | 205 | grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} |
f7bdf4db MD |
206 | sed 's/^syscall \([^ ]*\) nr \([^ ]*\) nbargs \([^ ]*\) .*$/'\ |
207 | 'TRACE_SYSCALL_TABLE(syscalls_noargs, sys_\1, \2, \3)/g'\ | |
208 | ${TMPFILE} >> ${HEADER} | |
25631135 | 209 | fi |
f7bdf4db MD |
210 | |
211 | #others. | |
212 | grep -v "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE} | |
054f2ed3 | 213 | sed 's/^syscall \([^ ]*\) nr \([^ ]*\) nbargs \([^ ]*\) .*$/'\ |
f7bdf4db | 214 | 'TRACE_SYSCALL_TABLE(sys_\1, sys_\1, \2, \3)/g'\ |
054f2ed3 MD |
215 | ${TMPFILE} >> ${HEADER} |
216 | ||
217 | echo -n \ | |
218 | " | |
219 | #endif /* CREATE_SYSCALL_TABLE */ | |
5fee13fd MD |
220 | " >> ${HEADER} |
221 | ||
222 | rm -f ${INPUTFILE}.tmp | |
223 | rm -f ${TMPFILE} | |
224 | rm -f ${SRCFILE} |