scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

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