System call inout/output arg processing
[lttng-modules.git] / instrumentation / syscalls / lttng-get-syscall-inout.sh
1 #!/bin/sh
2
3 # example usage:
4 # lttng-get-syscall-inout.sh table-syscall-inout.txt sys_select 1
5
6 FILENAME=$1
7 SYSCALL_NAME=$2
8 ARG_NR=$3
9 TMPFILE=inout.tmp.1
10 TMPFILE2=inout.tmp.2
11
12 if [ x"${FILENAME}" = x"" ]; then
13 echo "Error: Please specify input file name as first argument"
14 exit 1
15 fi
16
17 if [ x"${SYSCALL_NAME}" = x"" ]; then
18 echo "Error: Please specify system call name as second argument"
19 exit 1
20 fi
21
22 if [[ x"${ARG_NR}" = x"" || ${ARG_NR} == 0 ]]; then
23 echo "Error: Please specify argument number larger than 0 as 3rd argument"
24 exit 1
25 fi
26
27 grep "syscall ${SYSCALL_NAME} " ${FILENAME} > ${TMPFILE}
28 perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) .*/'\
29 '$2/g' ${TMPFILE} > ${TMPFILE2}
30
31 NR_MATCH=$(wc -l ${TMPFILE} | perl -p -e 's/^([^ ])*.*/$1/g')
32 if [ ${NR_MATCH} -gt 1 ]; then
33 echo "Error: more than one system call match"
34 exit 1
35 fi
36
37 if [ ${NR_MATCH} -eq 0 ]; then
38 # no match, default to inout
39 echo "sc_inout"
40 exit 0
41 fi
42
43 SC_ARGS=$(cat ${TMPFILE2})
44
45 if [ ${ARG_NR} -gt ${SC_ARGS} ]; then
46 echo "Error: argument number (${ARG_NR}) is larger than number of syscall arguments (${SC_ARGS})"
47 exit 1
48 fi
49
50 if [ ${ARG_NR} == 1 ]; then
51 perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \(([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2}
52 fi
53
54 if [ ${ARG_NR} == 2 ]; then
55 perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2}
56 fi
57
58 if [ ${ARG_NR} == 3 ]; then
59 perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, [^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2}
60 fi
61
62 if [ ${ARG_NR} == 4 ]; then
63 perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, [^,]*, [^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2}
64 fi
65
66 if [ ${ARG_NR} == 5 ]; then
67 perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, [^,]*, [^,]*, [^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2}
68 fi
69
70 if [ ${ARG_NR} == 6 ]; then
71 perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, [^,]*, [^,]*, [^,]*, [^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2}
72 fi
73
74 SC_ARG_TYPE=$(cat ${TMPFILE2})
75
76 if [ ${SC_ARG_TYPE} = "r" ]; then
77 echo "sc_in"
78 fi
79 if [ ${SC_ARG_TYPE} = "w" ]; then
80 echo "sc_out"
81 fi
82 if [ ${SC_ARG_TYPE} = "rw" ]; then
83 echo "sc_inout"
84 fi
85
86 rm -f ${TMPFILE} ${TMPFILE2}
This page took 0.032999 seconds and 4 git commands to generate.