commit a1184978d322ef887ac233416df8fcbbbaa3cd8e
parent fe20c94e63837f6864cdc001e746027fcb19eac0
Author: zerous Naveen Narayanan <zerous@nocebo.space>
Date: Wed, 4 Sep 2019 00:28:47 +0200
Add gensys.sh and syscall.lst for i386
Diffstat:
3 files changed, 49 insertions(+), 2 deletions(-)
diff --git a/src/libc/arch/i386/linux/Makefile b/src/libc/arch/i386/linux/Makefile
@@ -3,15 +3,31 @@ PROJECTDIR =../../../../..
include $(PROJECTDIR)/scripts/rules.mk
include ../../../rules.mk
-OBJS = crt.o
+OBJS =\
+ _Exit.o\
+ _close.o\
+ _open.o\
+ _read.o\
+ _write.o\
+ _lseek.o\
+ _brk.o\
+ _sigaction.o\
+ _getpid.o\
+ _Exit.o\
+ _kill.o\
+ crt.o\
-all:
+all: syscall
$(MAKE) objs
objs: $(OBJS)
crt.o: ../crt-posix.s
+syscall: syscall.lst
+ gensys.sh syscall.lst
+ touch syscall
+
clean:
rm -f `awk '/[0-9]* _/ {print $$2".s"}' syscall.lst`
rm -f syscall _sys_errlist.c
diff --git a/src/libc/arch/i386/linux/gensys.sh b/src/libc/arch/i386/linux/gensys.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# This job is very easy because app and kernel ABI are identical
+# until the 4th parameter, so we only have to set the syscall
+# number in eax
+
+sed 's/[ ]*#.*//
+ /^$/d' syscall.lst |
+while read num name
+do
+cat <<EOF > $name.s
+ .file "$name.s"
+
+ .globl $name
+$name:
+ movl \$$num,%eax
+ syscall
+ jmp _cerrno
+EOF
+done
diff --git a/src/libc/arch/i386/linux/syscall.lst b/src/libc/arch/i386/linux/syscall.lst
@@ -0,0 +1,11 @@
+#number name
+3 _read
+4 _write
+5 _open
+6 _close
+19 _lseek
+45 _brk
+67 _sigaction
+20 _getpid
+1 _Exit
+37 _kill