|  | #!/bin/bash | 
|  | # Barret Rhoden <brho@cs.berkeley.edu> | 
|  | # Builds a syscall table, an array of strings of syscall names. | 
|  | # Used by parlib. | 
|  |  | 
|  | if [ $# -ne 2 ] | 
|  | then | 
|  | echo "Need syscall.h and output file args!" | 
|  | exit -1 | 
|  | fi | 
|  |  | 
|  | SYSLIST=$1 | 
|  | SYSCALL_TBL=$2 | 
|  |  | 
|  | echo "// This was automatically generated with make_syscall_tbl.sh, do not edit" > $SYSCALL_TBL | 
|  | echo ""                                    >> $SYSCALL_TBL | 
|  | echo "const char *const __syscall_tbl[] =" >> $SYSCALL_TBL | 
|  | echo "{"                                   >> $SYSCALL_TBL | 
|  |  | 
|  | # Read lines formatted as: | 
|  | # | 
|  | #  #define	SYS_foo		1 | 
|  | #  #define	SYS_bar		3 | 
|  | # | 
|  | # And output them as: | 
|  | # | 
|  | #  [ 1 ] = "foo", | 
|  | #  [ 3 ] = "bar", | 
|  | # | 
|  | # Here's the guts of it.  Get the #define SYS_'s, compress the whitespace, cut | 
|  | # to drop the #define, drop the SYS_, then awk it. | 
|  |  | 
|  | cat $SYSLIST | grep "^#define SYS_" \ | 
|  | | sed 's/\s\+/\t/g' \ | 
|  | | cut -f 2- \ | 
|  | | sed 's/SYS_//' \ | 
|  | | awk '{printf "\t[ %s ] = \"%s\",\n", $2, $1}' \ | 
|  | >> $SYSCALL_TBL | 
|  |  | 
|  | echo "};"                                 >> $SYSCALL_TBL | 
|  | echo ""                                   >> $SYSCALL_TBL | 
|  | echo "const int __syscall_tbl_sz = sizeof (__syscall_tbl) / sizeof (__syscall_tbl[0]);" >> $SYSCALL_TBL |