Blame src/arch-gperf-generate

Packit Service 10c312
#!/bin/bash
Packit Service 10c312
Packit Service 10c312
# NOTE: changes to the arch_syscall_table struct in syscalls.h will affect
Packit Service 10c312
#       this script/gperf - BEWARE!
Packit Service 10c312
Packit Service 10c312
###
Packit Service 10c312
# helper functions
Packit Service 10c312
Packit Service 10c312
function exit_usage() {
Packit Service 10c312
	echo "usage: $0 <syscall_csv_file> <gperf_template>"
Packit Service 10c312
	exit 1
Packit Service 10c312
}
Packit Service 10c312
Packit Service 10c312
###
Packit Service 10c312
# main
Packit Service 10c312
Packit Service 10c312
# sanity check
Packit Service 10c312
[[ ! -r "$1" || ! -r "$2" ]] && exit_usage
Packit Service 10c312
sys_csv=$1
Packit Service 10c312
gperf_tmpl=$2
Packit Service 10c312
Packit Service 10c312
sys_csv_tmp=$(mktemp -t generate_syscalls_XXXXXX)
Packit Service 10c312
Packit Service 10c312
# filter and prepare the syscall csv file
Packit Service 10c312
cat $sys_csv | grep -v '^#' | nl -ba -s, -v0 | \
Packit Service 10c312
    sed -e 's/^[[:space:]]\+\([0-9]\+\),\([^,]\+\),\(.*\)/\2,\1,\3/' \
Packit Service 10c312
        -e ':repeat; {s|\([^,]\+\)\(.*\)[^_]PNR|\1\2,__PNR_\1|g;}; t repeat' \
Packit Service 10c312
         > $sys_csv_tmp
Packit Service 10c312
[[ $? -ne 0 ]] && exit 1
Packit Service 10c312
Packit Service 10c312
# create the gperf file
Packit Service 10c312
sed -e "/@@SYSCALLS_TABLE@@/r $sys_csv_tmp" \
Packit Service 10c312
    -e '/@@SYSCALLS_TABLE@@/d' \
Packit Service 10c312
    $gperf_tmpl > syscalls.perf
Packit Service 10c312
[[ $? -ne 0 ]] && exit 1
Packit Service 10c312
Packit Service 10c312
# cleanup
Packit Service 10c312
rm -f $sys_csv_tmp
Packit Service 10c312
Packit Service 10c312
exit 0