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