gensys.sh - scc - simple c99 compiler
(HTM) git clone git://git.simple-cc.org/scc
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Submodules
(DIR) README
(DIR) 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