gensys.sh (559B)
1 #!/bin/sh 2 3 # 4 # This job is very easy because app and kernel ABI are identical 5 # until the 4th parameter, so we only have to set the syscall 6 # number in rax 7 8 awk 'BEGIN {n = 33554432} 9 {gsub(/ *#./, "")} 10 /'$1'/ {printf("0x%x\t%s\t%s\n", n + $1, $2, $3)}' syscall.lst | 11 while read num name nargs 12 do 13 cat <<EOF > $name.s 14 .file "$name.s" 15 16 .globl $name 17 $name: 18 `case $nargs in 4|5|6) 19 echo "movq %rcx,%r10" 20 ;; 21 esac` 22 movq \$$num,%rax 23 syscall 24 jb 1f 25 retq 26 27 1: movq %rax,_errno(%rip) 28 movq \$-1,%rax 29 retq 30 EOF 31 done