#Filter
#select only syscalls we currently support
-#move non-pointers with arguments to a integer-only file.
+#move non-pointers with and without arguments to a integer-only file.
CLASS=integers
grep -v "\\*\|cap_user_header_t" ${SRCFILE} > ${TMPFILE}
mv ${TMPFILE} ${SRCFILE}
#grep "\\*\|cap_#user_header_t" ${SRCFILE} > ${TMPFILE}
#mv ${TMPFILE} ${SRCFILE}
-#TODO
-#move those without arguments to a separate file.
-#CLASS=noargs
-#grep "^syscall [^ ]* nr [^ ]* nbargs 0 " ${SRCFILE} > ${TMPFILE}
-#mv ${TMPFILE} ${SRCFILE}
-
HEADER=headers/${INPUTFILE}-${CLASS}.h
echo "/* THIS FILE IS AUTO-GENERATED. DO NOT EDIT */" > ${HEADER}
echo \
-"#undef TRACE_SYSTEM
+"#ifndef CREATE_SYSCALL_TABLE
+
+#undef TRACE_SYSTEM
#define TRACE_SYSTEM syscalls
#if !defined(_TRACE_SYSCALLS_H) || defined(TRACE_HEADER_MULTI_READ)
#include <linux/syscalls.h>
" >> ${HEADER}
-#TODO 0
+NRARGS=0
+
+echo \
+'DECLARE_EVENT_CLASS_NOARGS(syscalls_noargs,\n'\
+' TP_STRUCT__entry(),\n'\
+' TP_fast_assign(),\n'\
+' TP_printk()\n'\
+')'\
+ >> ${HEADER}
+
+grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE}
+sed 's/^syscall \([^ ]*\) nr \([^ ]*\) nbargs \([^ ]*\) '\
+'types: (\([^)]*\)) '\
+'args: (\([^)]*\))/'\
+'DEFINE_EVENT_NOARGS(syscalls_noargs, sys_\1)'\
+'/g'\
+ ${TMPFILE} >> ${HEADER}
+
# types: 4
# args 5
')/g'\
${TMPFILE} >> ${HEADER}
-echo -n \
+# Macro for tracing syscall table
+
+rm -f ${TMPFILE}
+for NRARGS in $(seq 0 6); do
+ grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} >> ${TMPFILE}
+done
+
+echo \
"
#endif /* _TRACE_SYSCALLS_H */
/* This part must be outside protection */
#include \"../../../probes/define_trace.h\"
+
+#else /* CREATE_SYSCALL_TABLE */
+" >> ${HEADER}
+
+
+NRARGS=0
+grep "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE}
+
+#noargs
+sed 's/^syscall \([^ ]*\) nr \([^ ]*\) nbargs \([^ ]*\) .*$/'\
+'TRACE_SYSCALL_TABLE(syscalls_noargs, sys_\1, \2, \3)/g'\
+ ${TMPFILE} >> ${HEADER}
+
+#others.
+grep -v "^syscall [^ ]* nr [^ ]* nbargs ${NRARGS} " ${SRCFILE} > ${TMPFILE}
+sed 's/^syscall \([^ ]*\) nr \([^ ]*\) nbargs \([^ ]*\) .*$/'\
+'TRACE_SYSCALL_TABLE(sys_\1, sys_\1, \2, \3)/g'\
+ ${TMPFILE} >> ${HEADER}
+
+echo -n \
+"
+#endif /* CREATE_SYSCALL_TABLE */
" >> ${HEADER}
rm -f ${INPUTFILE}.tmp