Support detailed syscalls with 0 arguments
[lttng-modules.git] / instrumentation / syscalls / lttng-syscalls-generate-headers.sh
CommitLineData
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
7INPUTDIR=$1
8INPUTFILE=$2
9INPUT=${INPUTDIR}/${INPUTFILE}
10SRCFILE=gen.tmp.0
11TMPFILE=gen.tmp.1
12
13cp ${INPUT} ${SRCFILE}
14
15#Cleanup
16sed 's/^\[.*\] //g' ${SRCFILE} > ${TMPFILE}
17mv ${TMPFILE} ${SRCFILE}
18
19sed 's/^syscall sys_\([^ ]*\)/syscall \1/g' ${SRCFILE} > ${TMPFILE}
20mv ${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
26CLASS=integers
27grep -v "\\*\|cap_user_header_t" ${SRCFILE} > ${TMPFILE}
28mv ${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
36HEADER=headers/${INPUTFILE}-${CLASS}.h
37
38echo "/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */" > ${HEADER}
39
40echo \
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
53NRARGS=0
54
55echo \
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
63grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE}
64sed '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
75NRARGS=1
76grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE}
77sed '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
92NRARGS=2
93grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE}
94sed '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
109NRARGS=3
110grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE}
111sed '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
127NRARGS=4
128grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE}
129sed '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
144NRARGS=5
145grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE}
146sed '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
162NRARGS=6
163grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE}
164sed '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 178rm -f ${TMPFILE}
f7bdf4db 179for NRARGS in $(seq 0 6); do
e15b0e20
MD
180 grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} >> ${TMPFILE}
181done
182
054f2ed3 183echo \
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
194NRARGS=0
195grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE}
196
197#noargs
198sed 's/^syscall \([^ ]*\) nr \([^ ]*\) nbargs \([^ ]*\) .*$/'\
199'TRACE_SYSCALL_TABLE(syscalls_noargs, sys_\1, \2, \3)/g'\
200 ${TMPFILE} >> ${HEADER}
201
202#others.
203grep -v "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE}
054f2ed3 204sed 's/^syscall \([^ ]*\) nr \([^ ]*\) nbargs \([^ ]*\) .*$/'\
f7bdf4db 205'TRACE_SYSCALL_TABLE(sys_\1, sys_\1, \2, \3)/g'\
054f2ed3
MD
206 ${TMPFILE} >> ${HEADER}
207
208echo -n \
209"
210#endif /* CREATE_SYSCALL_TABLE */
5fee13fd
MD
211" >> ${HEADER}
212
213rm -f ${INPUTFILE}.tmp
214rm -f ${TMPFILE}
215rm -f ${SRCFILE}
This page took 0.03104 seconds and 4 git commands to generate.