commit 6b796b0292d03c1e9e96e2e81ae164ca849931ed
parent ccfea5e1d621d738c39445892d900d6e9c4e5fc3
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Wed, 9 Sep 2020 20:40:51 +0200
libc: Add basic support for 9os in libc
This is a skeleton for the libc to allow
compilation of 9os.
Change-Id: Idbdd1e2fc2c1ce2dd5dc5698a8b4607a553c08e4
Diffstat:
12 files changed, 117 insertions(+), 1 deletion(-)
diff --git a/config/arm64-9os.mk b/config/arm64-9os.mk
@@ -0,0 +1,4 @@
+ARCH = arm64
+SYS = 9os
+MODE = native
+SYSASFLAGS = $(ARMV81_ASFLAGS)
diff --git a/include/bits/9os/sys.h b/include/bits/9os/sys.h
@@ -0,0 +1,7 @@
+#define O_RDONLY 0x00000000
+#define O_WRONLY 0x00000001
+#define O_RDWR 0x00000002
+
+#define O_TRUNC 0x00000400
+#define O_APPEND 0x00000008
+#define O_CREAT 0x00000200
diff --git a/include/bits/9os/sys/errno.h b/include/bits/9os/sys/errno.h
@@ -0,0 +1,45 @@
+extern int errno;
+extern char *const _sys_errlist[];
+extern const int _sys_nerr;
+
+#define E2BIG 1 /* Argument list too long */
+#define EACCES 2 /* Permission denied */
+#define EAGAIN 3 /* Try again */
+#define EBADF 4 /* Bad file number */
+#define EBUSY 5 /* Device or resource busy */
+#define ECHILD 6 /* No child processes */
+#define EDEADLK 7 /* Resource deadlock would occur */
+#define EEXIST 8 /* File exists */
+#define EFAULT 9 /* Bad address */
+#define EFBIG 10 /* File too large */
+#define EINTR 11 /* Interrupted system call */
+#define EINVAL 12 /* Invalid argument */
+#define EIO 13 /* I/O error */
+#define EISDIR 14 /* Is a directory */
+#define EMFILE 15 /* Too many open files */
+#define EMLINK 16 /* Too many links */
+#define ENAMETOOLONG 17 /* File name too long */
+#define ENFILE 18 /* File table overflow */
+#define ENODEV 19 /* No such device */
+#define ENOENT 20 /* No such file or directory */
+#define ENOEXEC 21 /* Exec format error */
+#define ENOLCK 22 /* No record locks available */
+#define ENOMEM 23 /* Out of memory */
+#define ENOSPC 24 /* No space left on device */
+#define ENOSYS 25 /* Invalid system call number */
+#define ENOTDIR 26 /* Not a directory */
+#define ENOTEMPTY 27 /* Directory not empty */
+#define ENOTTY 28 /* Not a typewriter */
+#define ENXIO 29 /* No such device or address */
+#define EPERM 30 /* Operation not permitted */
+#define EPIPE 31 /* Broken pipe */
+#define EROFS 32 /* Read-only file system */
+#define ESPIPE 33 /* Illegal seek */
+#define ESRCH 34 /* No such process */
+#define EXDEV 35 /* Cross-device link */
+#define ECANCELED 36 /* Operation Canceled */
+#define EINPROGRESS 37 /* Operation now in progress */
+#define ETXTBSY 38 /* Text file busy */
+#define EDOM 39 /* Math argument out of domain of func */
+#define ERANGE 40 /* Math result not representable */
+#define EUNKNOWN 41 /* Unknown error */
diff --git a/include/bits/9os/sys/signal.h b/include/bits/9os/sys/signal.h
@@ -0,0 +1,12 @@
+typedef int sig_atomic_t;
+
+#define SIG_ERR ((void (*)(int))-1)
+#define SIG_DFL ((void (*)(int)) 0)
+#define SIG_IGN ((void (*)(int)) 1)
+
+#define SIGINT 2
+#define SIGILL 4
+#define SIGABRT 6
+#define SIGFPE 8
+#define SIGSEGV 11
+#define SIGTERM 15
diff --git a/src/libc/arch/arm64/9os/.gitignore b/src/libc/arch/arm64/9os/.gitignore
@@ -0,0 +1 @@
+_sys_errlist.c
diff --git a/src/libc/arch/arm64/9os/Makefile b/src/libc/arch/arm64/9os/Makefile
@@ -0,0 +1,16 @@
+.POSIX:
+PROJECTDIR =../../../../..
+include $(PROJECTDIR)/scripts/rules.mk
+include ../../../rules.mk
+
+OBJS = _Exit.o \
+ raise.o \
+ _sys_errlist.o \
+ getenv.o \
+ putenv.o \
+ crt.o \
+
+all: $(OBJS)
+
+clean:
+ rm -f _sys_errlist.c
diff --git a/src/libc/arch/arm64/9os/_Exit.c b/src/libc/arch/arm64/9os/_Exit.c
@@ -0,0 +1,11 @@
+#include <stdlib.h>
+
+extern void panic(const char *msg);
+
+#undef _Exit
+
+void
+_Exit(int num)
+{
+ panic("_Exit");
+}
diff --git a/src/libc/arch/arm64/9os/crt.s b/src/libc/arch/arm64/9os/crt.s
@@ -0,0 +1,7 @@
+ .globl _start
+
+# dummy crt.s file needed for scc libc Makefile
+# This file is not actually used anywhere.
+
+_start:
+ ret
diff --git a/src/libc/arch/arm64/9os/getenv.c b/src/libc/arch/arm64/9os/getenv.c
@@ -0,0 +1 @@
+#include "../../posix/getenv.c"
diff --git a/src/libc/arch/arm64/9os/putenv.c b/src/libc/arch/arm64/9os/putenv.c
@@ -0,0 +1 @@
+#include "../../posix/putenv.c"
diff --git a/src/libc/arch/arm64/9os/raise.c b/src/libc/arch/arm64/9os/raise.c
@@ -0,0 +1,11 @@
+#include <stdlib.h>
+
+extern void panic(const char *msg);
+
+#undef raise
+
+int
+raise(int sig)
+{
+ panic("raise");
+}
diff --git a/src/libc/arch/arm64/Makefile b/src/libc/arch/arm64/Makefile
@@ -4,7 +4,7 @@ include $(PROJECTDIR)/scripts/rules.mk
include ../../rules.mk
OBJS = longjmp.o setjmp.o
-DIRS = linux
+DIRS = linux 9os
all: $(OBJS) $(SYS)