X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;ds=sidebyside;f=instrumentation%2Fsyscalls%2Flttng-get-syscall-inout.sh;h=34aef00ee44099aeca3e98d19e7af71e80986f66;hb=3395f24e5fa675db5a3bed08ac2b536ab1999b2c;hp=3fb394031fae54ee88f020bcb11b5b79c934174c;hpb=644d6e9c2807041db2b4fd9c3350d4fa243060b1;p=lttng-modules.git diff --git a/instrumentation/syscalls/lttng-get-syscall-inout.sh b/instrumentation/syscalls/lttng-get-syscall-inout.sh index 3fb39403..34aef00e 100755 --- a/instrumentation/syscalls/lttng-get-syscall-inout.sh +++ b/instrumentation/syscalls/lttng-get-syscall-inout.sh @@ -1,4 +1,5 @@ -#!/bin/sh +#!/bin/bash +# SPDX-License-Identifier: (GPL-2.0 or LGPL-2.1) # example usage: # lttng-get-syscall-inout.sh table-syscall-inout.txt select 1 @@ -6,81 +7,89 @@ FILENAME=$1 SYSCALL_NAME=$2 ARG_NR=$3 -TMPFILE=inout.tmp.1 -TMPFILE2=inout.tmp.2 +TMPFILE=$(mktemp) + +# Delete temp file on exit +trap 'rm -f "$TMPFILE"' EXIT + if [ x"${FILENAME}" = x"" ]; then - echo "Error: Please specify input file name as first argument" + echo "Error: Please specify input file name as first argument" >&2 exit 1 fi if [ x"${SYSCALL_NAME}" = x"" ]; then - echo "Error: Please specify system call name as second argument" + echo "Error: Please specify system call name as second argument" >&2 exit 1 fi if [[ x"${ARG_NR}" = x"" || ${ARG_NR} == 0 ]]; then - echo "Error: Please specify argument number larger than 0 as 3rd argument" + echo "Error: Please specify argument number larger than 0 as third argument" >&2 exit 1 fi -grep "syscall ${SYSCALL_NAME} " ${FILENAME} > ${TMPFILE} -perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) .*/'\ -'$2/g' ${TMPFILE} > ${TMPFILE2} +# Abort on error and undefined variable +set -eu + +# Get the required syscall +grep "syscall ${SYSCALL_NAME} " "${FILENAME}" > "${TMPFILE}" || true -NR_MATCH=$(wc -l ${TMPFILE} | perl -p -e 's/^([^ ])*.*/$1/g') -if [ ${NR_MATCH} -gt 1 ]; then - echo "Error: more than one system call match" +# Error out if we got more than one syscall +NR_MATCH=$(wc -l < "${TMPFILE}") +if [ "${NR_MATCH}" -gt 1 ]; then + echo "Error: more than one system call match" >&2 exit 1 fi -if [ ${NR_MATCH} -eq 0 ]; then +# Default to sc_inout for unknown syscalls +if [ "${NR_MATCH}" -eq 0 ]; then + echo "Warning: no match for syscall '${SYSCALL_NAME}', set to 'inout'" >&2 # no match, default to inout echo "sc_inout" exit 0 fi -SC_ARGS=$(cat ${TMPFILE2}) +# Get the number of argument +SC_ARGS=$(sed 's/^syscall \([^ ]*\) nbargs \([^ ]*\) .*/\2/g' "${TMPFILE}") -if [ ${ARG_NR} -gt ${SC_ARGS} ]; then - echo "Error: argument number (${ARG_NR}) is larger than number of syscall arguments (${SC_ARGS})" +if [ "${ARG_NR}" -gt "${SC_ARGS}" ]; then + echo "Error: argument number (${ARG_NR}) is larger than number of syscall arguments (${SC_ARGS})" >&2 exit 1 fi -if [ ${ARG_NR} == 1 ]; then - perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \(([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2} +if [ "${ARG_NR}" == 1 ]; then + SC_ARG_TYPE=$(sed 's/^syscall \([^ ]*\) nbargs \([^ ]*\) rw: (\([^,)]*\).*/\3/g' "${TMPFILE}") fi -if [ ${ARG_NR} == 2 ]; then - perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2} +if [ "${ARG_NR}" == 2 ]; then + SC_ARG_TYPE=$(sed 's/^syscall \([^ ]*\) nbargs \([^ ]*\) rw: ([^,]*, \([^,)]*\).*/\3/g' "${TMPFILE}") fi -if [ ${ARG_NR} == 3 ]; then - perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, [^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2} +if [ "${ARG_NR}" == 3 ]; then + SC_ARG_TYPE=$(sed 's/^syscall \([^ ]*\) nbargs \([^ ]*\) rw: ([^,]*, [^,]*, \([^,)]*\).*/\3/g' "${TMPFILE}") fi -if [ ${ARG_NR} == 4 ]; then - perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, [^,]*, [^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2} +if [ "${ARG_NR}" == 4 ]; then + SC_ARG_TYPE=$(sed 's/^syscall \([^ ]*\) nbargs \([^ ]*\) rw: ([^,]*, [^,]*, [^,]*, \([^,)]*\).*/\3/g' "${TMPFILE}") fi -if [ ${ARG_NR} == 5 ]; then - perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, [^,]*, [^,]*, [^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2} +if [ "${ARG_NR}" == 5 ]; then + SC_ARG_TYPE=$(sed 's/^syscall \([^ ]*\) nbargs \([^ ]*\) rw: ([^,]*, [^,]*, [^,]*, [^,]*, \([^,)]*\).*/\3/g' "${TMPFILE}") fi -if [ ${ARG_NR} == 6 ]; then - perl -p -e 's/^syscall ([^ ]*) nbargs ([^ ]*) rw: \([^,]*, [^,]*, [^,]*, [^,]*, [^,]*, ([^,\)]*).*/$3/g' ${TMPFILE} > ${TMPFILE2} +if [ "${ARG_NR}" == 6 ]; then + SC_ARG_TYPE=$(sed 's/^syscall \([^ ]*\) nbargs \([^ ]*\) rw: ([^,]*, [^,]*, [^,]*, [^,]*, [^,]*, \([^,)]*\).*/\3/g' "${TMPFILE}") fi -SC_ARG_TYPE=$(cat ${TMPFILE2}) -if [ ${SC_ARG_TYPE} = "r" ]; then +if [ "${SC_ARG_TYPE}" = "r" ]; then echo "sc_in" fi -if [ ${SC_ARG_TYPE} = "w" ]; then +if [ "${SC_ARG_TYPE}" = "w" ]; then echo "sc_out" fi -if [ ${SC_ARG_TYPE} = "rw" ]; then +if [ "${SC_ARG_TYPE}" = "rw" ]; then echo "sc_inout" fi -rm -f ${TMPFILE} ${TMPFILE2} +# EOF