9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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:
Aconfig/arm64-9os.mk | 4++++
Ainclude/bits/9os/sys.h | 7+++++++
Ainclude/bits/9os/sys/errno.h | 45+++++++++++++++++++++++++++++++++++++++++++++
Ainclude/bits/9os/sys/signal.h | 12++++++++++++
Asrc/libc/arch/arm64/9os/.gitignore | 1+
Asrc/libc/arch/arm64/9os/Makefile | 16++++++++++++++++
Asrc/libc/arch/arm64/9os/_Exit.c | 11+++++++++++
Asrc/libc/arch/arm64/9os/crt.s | 7+++++++
Asrc/libc/arch/arm64/9os/getenv.c | 1+
Asrc/libc/arch/arm64/9os/putenv.c | 1+
Asrc/libc/arch/arm64/9os/raise.c | 11+++++++++++
Msrc/libc/arch/arm64/Makefile | 2+-
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)