From 2a49908006b177c4d6354309333d06b1b96e4887 Mon Sep 17 00:00:00 2001 From: Minep Date: Mon, 17 Jul 2023 18:17:20 +0100 Subject: [PATCH] refactor: restructure the user space stuff. refactor: better isolation between kernel and user header file refactor: rebuild user space make system --- lunaix-os/.gitignore | 4 +- lunaix-os/.vscode/c_cpp_properties.json | 1 + lunaix-os/config/make-locations | 10 -- lunaix-os/config/make-os | 8 -- lunaix-os/includes/lunaix/foptions.h | 2 +- lunaix-os/includes/lunaix/ioctl.h | 2 +- lunaix-os/includes/lunaix/mm/mm.h | 2 +- lunaix-os/includes/lunaix/signal.h | 2 +- lunaix-os/includes/lunaix/status.h | 38 +----- lunaix-os/includes/lunaix/syscall.h | 121 +----------------- lunaix-os/includes/lunaix/types.h | 2 +- .../sys => includes/usr/lunaix}/dirent_defs.h | 0 .../usr/lunaix}/fcntl_defs.h | 0 .../sys => includes/usr/lunaix}/ioctl_defs.h | 0 .../sys => includes/usr/lunaix}/lxdirent.h | 5 +- .../sys => includes/usr/lunaix}/mann_flags.h | 0 .../usr/lunaix}/signal_defs.h | 0 .../errno.h => includes/usr/lunaix/status.h} | 21 +-- lunaix-os/includes/usr/lunaix/syscallid.h | 68 ++++++++++ .../sys => includes/usr/lunaix}/types.h | 0 lunaix-os/kernel/device/devfs.c | 2 +- lunaix-os/kernel/fs/iso9660/directory.c | 2 +- lunaix-os/kernel/fs/vfs.c | 2 +- lunaix-os/kernel/process/taskfs.c | 2 +- lunaix-os/makefile.prog | 12 -- lunaix-os/makefile.usr | 32 ----- lunaix-os/makeinc/os.mkinc | 18 +++ .../make-debug-tool => makeinc/qemu.mkinc} | 0 .../make-cc => makeinc/toolchain.mkinc} | 6 +- lunaix-os/makeinc/utils.mkinc | 4 + lunaix-os/uprog/includes/ld/elf.h | 67 ++++++++++ lunaix-os/usr/api/errno.c | 4 - lunaix-os/usr/api/ioctl.c | 4 - lunaix-os/usr/includes | 1 + lunaix-os/usr/includes/string.h | 24 ---- lunaix-os/usr/includes/sys/mann.h | 13 -- lunaix-os/usr/includes/sys/mount.h | 17 --- lunaix-os/{uprog => usr/init}/init.c | 2 +- lunaix-os/usr/init/makefile | 21 +++ .../usr/{uwrap.S => libc/arch/i386/crt0.S} | 8 +- .../usr/{api => libc/arch/i386}/dirent.c | 4 +- lunaix-os/usr/libc/arch/i386/errno.c | 4 + lunaix-os/usr/{api => libc/arch/i386}/fcntl.c | 2 +- lunaix-os/usr/libc/arch/i386/ioctl.c | 4 + .../usr/{api => libc/arch/i386}/lunaix.c | 4 +- lunaix-os/usr/{api => libc/arch/i386}/mann.c | 4 +- lunaix-os/usr/{api => libc/arch/i386}/mount.c | 3 +- .../usr/{api => libc/arch/i386}/signal.c | 4 +- lunaix-os/usr/libc/arch/i386/syscall.h | 69 ++++++++++ .../usr/{api => libc/arch/i386}/unistd.c | 4 +- lunaix-os/usr/{ => libc}/includes/dirent.h | 11 +- lunaix-os/usr/libc/includes/errno.h | 10 ++ lunaix-os/usr/{ => libc}/includes/fcntl.h | 6 +- .../sys => libc/includes/lunaix}/ioctl.h | 5 +- .../sys => libc/includes/lunaix}/lunaix.h | 2 +- lunaix-os/usr/libc/includes/lunaix/mann.h | 11 ++ lunaix-os/usr/libc/includes/lunaix/mount.h | 14 ++ lunaix-os/usr/{ => libc}/includes/signal.h | 12 +- lunaix-os/usr/{ => libc}/includes/stdio.h | 2 +- lunaix-os/usr/{ => libc}/includes/stdlib.h | 3 +- lunaix-os/usr/libc/includes/string.h | 18 +++ lunaix-os/usr/{ => libc}/includes/unistd.h | 74 +++++------ lunaix-os/usr/libc/makefile | 50 ++++++++ lunaix-os/usr/libc/{ => src}/_mystdio.h | 0 lunaix-os/usr/libc/{ => src}/_vprintf.c | 0 lunaix-os/usr/libc/{ => src}/itoa.c | 0 lunaix-os/usr/libc/{ => src}/printf.c | 0 lunaix-os/usr/libc/{ => src}/readdir.c | 1 - lunaix-os/usr/libc/{ => src}/string.c | 0 lunaix-os/usr/link-usr.ld | 2 +- lunaix-os/{uprog => usr/ls}/ls.c | 0 lunaix-os/usr/ls/makefile | 21 +++ lunaix-os/usr/makefile | 54 ++++++++ lunaix-os/usr/sh/makefile | 21 +++ lunaix-os/{uprog => usr/sh}/sh.c | 4 +- lunaix-os/usr/signal_demo/makefile | 21 +++ .../{uprog => usr/signal_demo}/signal_demo.c | 2 +- 77 files changed, 588 insertions(+), 385 deletions(-) delete mode 100644 lunaix-os/config/make-locations delete mode 100644 lunaix-os/config/make-os rename lunaix-os/{usr/includes/sys => includes/usr/lunaix}/dirent_defs.h (100%) rename lunaix-os/{usr/includes => includes/usr/lunaix}/fcntl_defs.h (100%) rename lunaix-os/{usr/includes/sys => includes/usr/lunaix}/ioctl_defs.h (100%) rename lunaix-os/{usr/includes/sys => includes/usr/lunaix}/lxdirent.h (54%) rename lunaix-os/{usr/includes/sys => includes/usr/lunaix}/mann_flags.h (100%) rename lunaix-os/{usr/includes => includes/usr/lunaix}/signal_defs.h (100%) rename lunaix-os/{usr/includes/errno.h => includes/usr/lunaix/status.h} (64%) create mode 100644 lunaix-os/includes/usr/lunaix/syscallid.h rename lunaix-os/{usr/includes/sys => includes/usr/lunaix}/types.h (100%) delete mode 100644 lunaix-os/makefile.prog delete mode 100644 lunaix-os/makefile.usr create mode 100644 lunaix-os/makeinc/os.mkinc rename lunaix-os/{config/make-debug-tool => makeinc/qemu.mkinc} (100%) rename lunaix-os/{config/make-cc => makeinc/toolchain.mkinc} (85%) create mode 100644 lunaix-os/makeinc/utils.mkinc create mode 100644 lunaix-os/uprog/includes/ld/elf.h delete mode 100644 lunaix-os/usr/api/errno.c delete mode 100644 lunaix-os/usr/api/ioctl.c create mode 120000 lunaix-os/usr/includes delete mode 100644 lunaix-os/usr/includes/string.h delete mode 100644 lunaix-os/usr/includes/sys/mann.h delete mode 100644 lunaix-os/usr/includes/sys/mount.h rename lunaix-os/{uprog => usr/init}/init.c (96%) create mode 100644 lunaix-os/usr/init/makefile rename lunaix-os/usr/{uwrap.S => libc/arch/i386/crt0.S} (62%) rename lunaix-os/usr/{api => libc/arch/i386}/dirent.c (55%) create mode 100644 lunaix-os/usr/libc/arch/i386/errno.c rename lunaix-os/usr/{api => libc/arch/i386}/fcntl.c (73%) create mode 100644 lunaix-os/usr/libc/arch/i386/ioctl.c rename lunaix-os/usr/{api => libc/arch/i386}/lunaix.c (83%) rename lunaix-os/usr/{api => libc/arch/i386}/mann.c (84%) rename lunaix-os/usr/{api => libc/arch/i386}/mount.c (69%) rename lunaix-os/usr/{api => libc/arch/i386}/signal.c (86%) create mode 100644 lunaix-os/usr/libc/arch/i386/syscall.h rename lunaix-os/usr/{api => libc/arch/i386}/unistd.c (97%) rename lunaix-os/usr/{ => libc}/includes/dirent.h (68%) create mode 100644 lunaix-os/usr/libc/includes/errno.h rename lunaix-os/usr/{ => libc}/includes/fcntl.h (64%) rename lunaix-os/usr/{includes/sys => libc/includes/lunaix}/ioctl.h (58%) rename lunaix-os/usr/{includes/sys => libc/includes/lunaix}/lunaix.h (91%) create mode 100644 lunaix-os/usr/libc/includes/lunaix/mann.h create mode 100644 lunaix-os/usr/libc/includes/lunaix/mount.h rename lunaix-os/usr/{ => libc}/includes/signal.h (71%) rename lunaix-os/usr/{ => libc}/includes/stdio.h (93%) rename lunaix-os/usr/{ => libc}/includes/stdlib.h (62%) create mode 100644 lunaix-os/usr/libc/includes/string.h rename lunaix-os/usr/{ => libc}/includes/unistd.h (75%) create mode 100644 lunaix-os/usr/libc/makefile rename lunaix-os/usr/libc/{ => src}/_mystdio.h (100%) rename lunaix-os/usr/libc/{ => src}/_vprintf.c (100%) rename lunaix-os/usr/libc/{ => src}/itoa.c (100%) rename lunaix-os/usr/libc/{ => src}/printf.c (100%) rename lunaix-os/usr/libc/{ => src}/readdir.c (96%) rename lunaix-os/usr/libc/{ => src}/string.c (100%) rename lunaix-os/{uprog => usr/ls}/ls.c (100%) create mode 100644 lunaix-os/usr/ls/makefile create mode 100644 lunaix-os/usr/makefile create mode 100644 lunaix-os/usr/sh/makefile rename lunaix-os/{uprog => usr/sh}/sh.c (98%) create mode 100644 lunaix-os/usr/signal_demo/makefile rename lunaix-os/{uprog => usr/signal_demo}/signal_demo.c (98%) diff --git a/lunaix-os/.gitignore b/lunaix-os/.gitignore index 251d992..32bb844 100644 --- a/lunaix-os/.gitignore +++ b/lunaix-os/.gitignore @@ -8,4 +8,6 @@ bx_enh_dbg.ini machine/ draft/ iso_inspect/ -unused/ \ No newline at end of file +unused/ + +**.o \ No newline at end of file diff --git a/lunaix-os/.vscode/c_cpp_properties.json b/lunaix-os/.vscode/c_cpp_properties.json index 0fdf995..f91b050 100644 --- a/lunaix-os/.vscode/c_cpp_properties.json +++ b/lunaix-os/.vscode/c_cpp_properties.json @@ -4,6 +4,7 @@ "name": "OS-DEV", "includePath": [ "${workspaceFolder}/includes", + "${workspaceFolder}/includes/usr", "${workspaceFolder}/usr/includes" ], "compilerArgs": [ diff --git a/lunaix-os/config/make-locations b/lunaix-os/config/make-locations deleted file mode 100644 index 093f7ba..0000000 --- a/lunaix-os/config/make-locations +++ /dev/null @@ -1,10 +0,0 @@ -BUILD_DIR := build -KERNEL_DIR := kernel -OBJECT_DIR := $(BUILD_DIR)/obj -BIN_DIR := $(BUILD_DIR)/bin -ISO_DIR := $(BUILD_DIR)/iso -USR_DIR := $(BUILD_DIR)/usr -ISO_BOOT_DIR := $(ISO_DIR)/boot -ISO_GRUB_DIR := $(ISO_BOOT_DIR)/grub - -INCLUDES := -Iincludes -Iusr/includes \ No newline at end of file diff --git a/lunaix-os/config/make-os b/lunaix-os/config/make-os deleted file mode 100644 index fd4908e..0000000 --- a/lunaix-os/config/make-os +++ /dev/null @@ -1,8 +0,0 @@ -OS_ARCH := x86 -OS_NAME := lunaix -OS_ID := LunaixOS -OS_VER := dev$(shell date +%Y%m%d) -OS_BIN := $(OS_NAME).bin -OS_ISO := $(OS_NAME).iso - -USR_LIB := liblxusrt.a diff --git a/lunaix-os/includes/lunaix/foptions.h b/lunaix-os/includes/lunaix/foptions.h index 625c0b2..38b055a 100644 --- a/lunaix-os/includes/lunaix/foptions.h +++ b/lunaix-os/includes/lunaix/foptions.h @@ -1,6 +1,6 @@ #ifndef __LUNAIX_FOPTIONS_H #define __LUNAIX_FOPTIONS_H -#include +#include #endif /* __LUNAIX_FOPTIONS_H */ diff --git a/lunaix-os/includes/lunaix/ioctl.h b/lunaix-os/includes/lunaix/ioctl.h index 6dcd83c..ed7c4f7 100644 --- a/lunaix-os/includes/lunaix/ioctl.h +++ b/lunaix-os/includes/lunaix/ioctl.h @@ -1,6 +1,6 @@ #ifndef __LUNAIX_IOCTL_H #define __LUNAIX_IOCTL_H -#include +#include #endif /* __LUNAIX_IOCTL_H */ diff --git a/lunaix-os/includes/lunaix/mm/mm.h b/lunaix-os/includes/lunaix/mm/mm.h index 24ced3c..433ecfc 100644 --- a/lunaix-os/includes/lunaix/mm/mm.h +++ b/lunaix-os/includes/lunaix/mm/mm.h @@ -6,7 +6,7 @@ #include #include -#include +#include /** * @brief 私有区域,该区域中的页无法进行任何形式的共享。 diff --git a/lunaix-os/includes/lunaix/signal.h b/lunaix-os/includes/lunaix/signal.h index 16ec033..dbe9ce5 100644 --- a/lunaix-os/includes/lunaix/signal.h +++ b/lunaix-os/includes/lunaix/signal.h @@ -1,7 +1,7 @@ #ifndef __LUNAIX_SIGNAL_H #define __LUNAIX_SIGNAL_H -#include +#include #define _SIG_NUM 16 diff --git a/lunaix-os/includes/lunaix/status.h b/lunaix-os/includes/lunaix/status.h index ffaacf5..9b05747 100644 --- a/lunaix-os/includes/lunaix/status.h +++ b/lunaix-os/includes/lunaix/status.h @@ -1,37 +1 @@ -#ifndef __LUNAIX_CODE_H -#define __LUNAIX_CODE_H - -#define LXPROCFULL -(1) -#define LXHEAPFULL -(2) -#define LXINVLDPTR -(2) -#define LXOUTOFMEM -(3) -#define LXSEGFAULT -(5) -#define EINVAL -(6) - -#define EINTR -(7) - -#define EMFILE -8 -#define ENOENT -9 -#define ENAMETOOLONG -10 -#define ENOTDIR -11 -#define EEXIST -12 -#define EBADF -13 -#define ENOTSUP -14 -#define EIO -15 -#define ELOOP -16 -#define ENOTEMPTY -17 -#define EROFS -18 -#define EISDIR -19 -#define EBUSY -20 -#define EXDEV -21 -#define ENODEV -22 -#define ERANGE -23 -#define ENOMEM LXOUTOFMEM -#define ENOTDEV -24 -#define EOVERFLOW -25 -#define ENOTBLK -26 -#define ENOEXEC -27 -#define E2BIG -28 -#define ELIBBAD -29 - -#endif /* __LUNAIX_CODE_H */ +#include \ No newline at end of file diff --git a/lunaix-os/includes/lunaix/syscall.h b/lunaix-os/includes/lunaix/syscall.h index a512bd7..4a101fa 100644 --- a/lunaix-os/includes/lunaix/syscall.h +++ b/lunaix-os/includes/lunaix/syscall.h @@ -2,70 +2,7 @@ #define __LUNAIX_SYSCALL_H #include - -#define __SYSCALL_fork 1 -#define __SYSCALL_yield 2 -#define __SYSCALL_sbrk 3 -#define __SYSCALL_brk 4 -#define __SYSCALL_getpid 5 -#define __SYSCALL_getppid 6 -#define __SYSCALL_sleep 7 -#define __SYSCALL__exit 8 -#define __SYSCALL_wait 9 -#define __SYSCALL_waitpid 10 - -#define __SYSCALL_sigreturn 11 -#define __SYSCALL_sigprocmask 12 -#define __SYSCALL_signal 13 -#define __SYSCALL_pause 14 -#define __SYSCALL_kill 15 -#define __SYSCALL_alarm 16 -#define __SYSCALL_sigpending 17 -#define __SYSCALL_sigsuspend 18 -#define __SYSCALL_open 19 -#define __SYSCALL_close 20 - -#define __SYSCALL_read 21 -#define __SYSCALL_write 22 -#define __SYSCALL_sys_readdir 23 -#define __SYSCALL_mkdir 24 -#define __SYSCALL_lseek 25 -#define __SYSCALL_geterrno 26 -#define __SYSCALL_readlink 27 -#define __SYSCALL_readlinkat 28 -#define __SYSCALL_rmdir 29 - -#define __SYSCALL_unlink 30 -#define __SYSCALL_unlinkat 31 -#define __SYSCALL_link 32 -#define __SYSCALL_fsync 33 -#define __SYSCALL_dup 34 -#define __SYSCALL_dup2 35 -#define __SYSCALL_realpathat 36 -#define __SYSCALL_symlink 37 -#define __SYSCALL_chdir 38 -#define __SYSCALL_fchdir 39 -#define __SYSCALL_getcwd 40 -#define __SYSCALL_rename 41 -#define __SYSCALL_mount 42 -#define __SYSCALL_unmount 43 -#define __SYSCALL_getxattr 44 -#define __SYSCALL_setxattr 45 -#define __SYSCALL_fgetxattr 46 -#define __SYSCALL_fsetxattr 47 - -#define __SYSCALL_ioctl 48 -#define __SYSCALL_getpgid 49 -#define __SYSCALL_setpgid 50 - -#define __SYSCALL_syslog 51 - -#define __SYSCALL_sys_mmap 52 -#define __SYSCALL_munmap 53 - -#define __SYSCALL_execve 54 - -#define __SYSCALL_MAX 0x100 +#include #ifndef __ASM__ @@ -107,61 +44,5 @@ syscall_install(); asm("sti"); \ { code }; \ asm("cli"); - -#define ___DOINT33(callcode, rettype) \ - int v; \ - asm volatile("int %1\n" : "=a"(v) : "i"(LUNAIX_SYS_CALL), "a"(callcode)); \ - return (rettype)v; - -#define __LXSYSCALL(rettype, name) \ - rettype name() \ - { \ - ___DOINT33(__SYSCALL_##name, rettype) \ - } - -#define __LXSYSCALL1(rettype, name, t1, p1) \ - rettype name(__PARAM_MAP1(t1, p1)) \ - { \ - asm("" ::"b"(p1)); \ - ___DOINT33(__SYSCALL_##name, rettype) \ - } - -#define __LXSYSCALL2(rettype, name, t1, p1, t2, p2) \ - rettype name(__PARAM_MAP2(t1, p1, t2, p2)) \ - { \ - asm("\n" ::"b"(p1), "c"(p2)); \ - ___DOINT33(__SYSCALL_##name, rettype) \ - } - -#define __LXSYSCALL3(rettype, name, t1, p1, t2, p2, t3, p3) \ - rettype name(__PARAM_MAP3(t1, p1, t2, p2, t3, p3)) \ - { \ - asm("\n" ::"b"(p1), "c"(p2), "d"(p3)); \ - ___DOINT33(__SYSCALL_##name, rettype) \ - } - -#define __LXSYSCALL4(rettype, name, t1, p1, t2, p2, t3, p3, t4, p4) \ - rettype name(__PARAM_MAP4(t1, p1, t2, p2, t3, p3, t4, p4)) \ - { \ - asm("\n" ::"b"(p1), "c"(p2), "d"(p3), "D"(p4)); \ - ___DOINT33(__SYSCALL_##name, rettype) \ - } - -#define __LXSYSCALL5(rettype, name, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5) \ - rettype name(__PARAM_MAP5(t1, p1, t2, p2, t3, p3, t4, p4, t5, p5)) \ - { \ - asm("" ::"r"(p5), "b"(p1), "c"(p2), "d"(p3), "D"(p4), "S"(p5)); \ - ___DOINT33(__SYSCALL_##name, rettype) \ - } - -#define __LXSYSCALL2_VARG(rettype, name, t1, p1, t2, p2) \ - __attribute__((noinline)) rettype name(__PARAM_MAP2(t1, p1, t2, p2), ...) \ - { \ - /* No inlining! This depends on the call frame assumption */ \ - void* _last = (void*)&p2 + sizeof(void*); \ - asm("\n" ::"b"(p1), "c"(p2), "d"(_last)); \ - ___DOINT33(__SYSCALL_##name, rettype) \ - } - #endif #endif /* __LUNAIX_SYSCALL_H */ diff --git a/lunaix-os/includes/lunaix/types.h b/lunaix-os/includes/lunaix/types.h index 5a6fb90..fc0ef1c 100644 --- a/lunaix-os/includes/lunaix/types.h +++ b/lunaix-os/includes/lunaix/types.h @@ -3,7 +3,7 @@ #include #include -#include +#include #define PACKED __attribute__((packed)) diff --git a/lunaix-os/usr/includes/sys/dirent_defs.h b/lunaix-os/includes/usr/lunaix/dirent_defs.h similarity index 100% rename from lunaix-os/usr/includes/sys/dirent_defs.h rename to lunaix-os/includes/usr/lunaix/dirent_defs.h diff --git a/lunaix-os/usr/includes/fcntl_defs.h b/lunaix-os/includes/usr/lunaix/fcntl_defs.h similarity index 100% rename from lunaix-os/usr/includes/fcntl_defs.h rename to lunaix-os/includes/usr/lunaix/fcntl_defs.h diff --git a/lunaix-os/usr/includes/sys/ioctl_defs.h b/lunaix-os/includes/usr/lunaix/ioctl_defs.h similarity index 100% rename from lunaix-os/usr/includes/sys/ioctl_defs.h rename to lunaix-os/includes/usr/lunaix/ioctl_defs.h diff --git a/lunaix-os/usr/includes/sys/lxdirent.h b/lunaix-os/includes/usr/lunaix/lxdirent.h similarity index 54% rename from lunaix-os/usr/includes/sys/lxdirent.h rename to lunaix-os/includes/usr/lunaix/lxdirent.h index e616180..6793d99 100644 --- a/lunaix-os/usr/includes/sys/lxdirent.h +++ b/lunaix-os/includes/usr/lunaix/lxdirent.h @@ -1,9 +1,8 @@ #ifndef __LUNAIX_SYS_LXDIRENT_H #define __LUNAIX_SYS_LXDIRENT_H -#include +#include -int -sys_readdir(int fd, struct lx_dirent* dirent); +int sys_readdir(int fd, struct lx_dirent* dirent); #endif /* __LUNAIX_DIRENT_H */ diff --git a/lunaix-os/usr/includes/sys/mann_flags.h b/lunaix-os/includes/usr/lunaix/mann_flags.h similarity index 100% rename from lunaix-os/usr/includes/sys/mann_flags.h rename to lunaix-os/includes/usr/lunaix/mann_flags.h diff --git a/lunaix-os/usr/includes/signal_defs.h b/lunaix-os/includes/usr/lunaix/signal_defs.h similarity index 100% rename from lunaix-os/usr/includes/signal_defs.h rename to lunaix-os/includes/usr/lunaix/signal_defs.h diff --git a/lunaix-os/usr/includes/errno.h b/lunaix-os/includes/usr/lunaix/status.h similarity index 64% rename from lunaix-os/usr/includes/errno.h rename to lunaix-os/includes/usr/lunaix/status.h index f3c5347..504584b 100644 --- a/lunaix-os/usr/includes/errno.h +++ b/lunaix-os/includes/usr/lunaix/status.h @@ -1,8 +1,15 @@ -#ifndef __LUNAIX_SYS_ERRNO_H -#define __LUNAIX_SYS_ERRNO_H +#ifndef __LUNAIX_STATUS_H +#define __LUNAIX_STATUS_H +#define LXPROCFULL -(1) +#define LXHEAPFULL -(2) +#define LXINVLDPTR -(2) +#define LXOUTOFMEM -(3) +#define LXSEGFAULT -(5) #define EINVAL -(6) + #define EINTR -(7) + #define EMFILE -8 #define ENOENT -9 #define ENAMETOOLONG -10 @@ -19,16 +26,12 @@ #define EXDEV -21 #define ENODEV -22 #define ERANGE -23 -#define ENOMEM -(3) +#define ENOMEM LXOUTOFMEM #define ENOTDEV -24 #define EOVERFLOW -25 #define ENOTBLK -26 #define ENOEXEC -27 #define E2BIG -28 +#define ELIBBAD -29 -int -geterrno(); - -#define errno (geterrno()) - -#endif /* __LUNAIX_ERRNO_H */ +#endif /* __LUNAIX_STATUS_H */ diff --git a/lunaix-os/includes/usr/lunaix/syscallid.h b/lunaix-os/includes/usr/lunaix/syscallid.h new file mode 100644 index 0000000..cc7ac7a --- /dev/null +++ b/lunaix-os/includes/usr/lunaix/syscallid.h @@ -0,0 +1,68 @@ +#ifndef __LUNAIX_SYSCALLID_H +#define __LUNAIX_SYSCALLID_H + +#define __SYSCALL_fork 1 +#define __SYSCALL_yield 2 +#define __SYSCALL_sbrk 3 +#define __SYSCALL_brk 4 +#define __SYSCALL_getpid 5 +#define __SYSCALL_getppid 6 +#define __SYSCALL_sleep 7 +#define __SYSCALL__exit 8 +#define __SYSCALL_wait 9 +#define __SYSCALL_waitpid 10 + +#define __SYSCALL_sigreturn 11 +#define __SYSCALL_sigprocmask 12 +#define __SYSCALL_signal 13 +#define __SYSCALL_pause 14 +#define __SYSCALL_kill 15 +#define __SYSCALL_alarm 16 +#define __SYSCALL_sigpending 17 +#define __SYSCALL_sigsuspend 18 +#define __SYSCALL_open 19 +#define __SYSCALL_close 20 + +#define __SYSCALL_read 21 +#define __SYSCALL_write 22 +#define __SYSCALL_sys_readdir 23 +#define __SYSCALL_mkdir 24 +#define __SYSCALL_lseek 25 +#define __SYSCALL_geterrno 26 +#define __SYSCALL_readlink 27 +#define __SYSCALL_readlinkat 28 +#define __SYSCALL_rmdir 29 + +#define __SYSCALL_unlink 30 +#define __SYSCALL_unlinkat 31 +#define __SYSCALL_link 32 +#define __SYSCALL_fsync 33 +#define __SYSCALL_dup 34 +#define __SYSCALL_dup2 35 +#define __SYSCALL_realpathat 36 +#define __SYSCALL_symlink 37 +#define __SYSCALL_chdir 38 +#define __SYSCALL_fchdir 39 +#define __SYSCALL_getcwd 40 +#define __SYSCALL_rename 41 +#define __SYSCALL_mount 42 +#define __SYSCALL_unmount 43 +#define __SYSCALL_getxattr 44 +#define __SYSCALL_setxattr 45 +#define __SYSCALL_fgetxattr 46 +#define __SYSCALL_fsetxattr 47 + +#define __SYSCALL_ioctl 48 +#define __SYSCALL_getpgid 49 +#define __SYSCALL_setpgid 50 + +#define __SYSCALL_syslog 51 + +#define __SYSCALL_sys_mmap 52 +#define __SYSCALL_munmap 53 + +#define __SYSCALL_execve 54 + +#define __SYSCALL_MAX 0x100 + +#endif /* __LUNAIX_SYSCALLID_H */ diff --git a/lunaix-os/usr/includes/sys/types.h b/lunaix-os/includes/usr/lunaix/types.h similarity index 100% rename from lunaix-os/usr/includes/sys/types.h rename to lunaix-os/includes/usr/lunaix/types.h diff --git a/lunaix-os/kernel/device/devfs.c b/lunaix-os/kernel/device/devfs.c index 867f93d..fdb8b47 100644 --- a/lunaix-os/kernel/device/devfs.c +++ b/lunaix-os/kernel/device/devfs.c @@ -3,7 +3,7 @@ #include #include -#include +#include extern struct v_inode_ops devfs_inode_ops; extern struct v_file_ops devfs_file_ops; diff --git a/lunaix-os/kernel/fs/iso9660/directory.c b/lunaix-os/kernel/fs/iso9660/directory.c index 76262d2..5a06fc8 100644 --- a/lunaix-os/kernel/fs/iso9660/directory.c +++ b/lunaix-os/kernel/fs/iso9660/directory.c @@ -6,7 +6,7 @@ #include -#include +#include extern struct cake_pile* drec_cache_pile; diff --git a/lunaix-os/kernel/fs/vfs.c b/lunaix-os/kernel/fs/vfs.c index 988be63..3197a5b 100644 --- a/lunaix-os/kernel/fs/vfs.c +++ b/lunaix-os/kernel/fs/vfs.c @@ -56,7 +56,7 @@ #include -#include +#include static struct cake_pile* dnode_pile; static struct cake_pile* inode_pile; diff --git a/lunaix-os/kernel/process/taskfs.c b/lunaix-os/kernel/process/taskfs.c index ca7f61e..6ecdc8f 100644 --- a/lunaix-os/kernel/process/taskfs.c +++ b/lunaix-os/kernel/process/taskfs.c @@ -7,7 +7,7 @@ #include #include -#include +#include #define COUNTER_MASK ((1 << 16) - 1) diff --git a/lunaix-os/makefile.prog b/lunaix-os/makefile.prog deleted file mode 100644 index 2c8b8e7..0000000 --- a/lunaix-os/makefile.prog +++ /dev/null @@ -1,12 +0,0 @@ -include config/make-locations -include config/make-os -include config/make-cc - -SRC_FILES := $(wildcard uprog/*.c) -PROGRAMES := $(patsubst uprog/%.c, $(USR_DIR)/%, $(SRC_FILES)) - -$(USR_DIR)/%: - @echo " BUILD $(*F)" - @$(CC) -T usr/link-usr.ld $(INCLUDES) $(CFLAGS) -g $(LDFLAGS) uprog/$(*F).c $(BIN_DIR)/$(USR_LIB) -o $@ - -all: $(PROGRAMES) \ No newline at end of file diff --git a/lunaix-os/makefile.usr b/lunaix-os/makefile.usr deleted file mode 100644 index 7cbec35..0000000 --- a/lunaix-os/makefile.usr +++ /dev/null @@ -1,32 +0,0 @@ -include config/make-cc -include config/make-os -include config/make-locations - -SRC_DIRS := usr - -SRC_FILES := $(foreach f, $(SRC_DIRS), $(shell find $(f) -name "*.[cS]")) - -OBJS := $(foreach f, $(SRC_FILES), $(OBJECT_DIR)/$(f).o) - -$(OBJECT_DIR)/%.S.o: %.S - @mkdir -p $(@D) - @echo " CC $<" - @$(CC) $(INCLUDES) -c $< -o $@ - -$(OBJECT_DIR)/%.c.o: %.c - @mkdir -p $(@D) - @echo " CC $<" - @$(CC) $(INCLUDES) $(CFLAGS) -g -c $< -o $@ - -$(BIN_DIR)/$(USR_LIB): $(OBJS) - @echo " AR $@" - @$(AR) rcs $@ $^ - -usr-runtime: $(BIN_DIR)/$(USR_LIB) - -usr-runtime-debug: O := -Og -usr-runtime-debug: CFLAGS := -g -std=gnu99 -ffreestanding $(O) $(W) $(ARCH_OPT) -D__LUNAIXOS_DEBUG__ -usr-runtime-debug: LDFLAGS := -g -ffreestanding $(O) -nostdlib -lgcc -usr-runtime-debug: usr-runtime - -usr-objs: $(OBJS) \ No newline at end of file diff --git a/lunaix-os/makeinc/os.mkinc b/lunaix-os/makeinc/os.mkinc new file mode 100644 index 0000000..1a8ac15 --- /dev/null +++ b/lunaix-os/makeinc/os.mkinc @@ -0,0 +1,18 @@ +OS_ARCH := x86 +OS_NAME := lunaix +OS_ID := LunaixOS +OS_VER := dev$(shell date +%Y%m%d) +OS_BIN := $(OS_NAME).bin +OS_ISO := $(OS_NAME).iso + +USR_LIB := liblxusrt.a + +BUILD_DIR := build +KERNEL_DIR := kernel +OBJECT_DIR := $(BUILD_DIR)/obj +BIN_DIR := $(BUILD_DIR)/bin +ISO_DIR := $(BUILD_DIR)/iso +ISO_BOOT_DIR := $(ISO_DIR)/boot +ISO_GRUB_DIR := $(ISO_BOOT_DIR)/grub + +INCLUDES := -Iincludes -Iincludes/usr \ No newline at end of file diff --git a/lunaix-os/config/make-debug-tool b/lunaix-os/makeinc/qemu.mkinc similarity index 100% rename from lunaix-os/config/make-debug-tool rename to lunaix-os/makeinc/qemu.mkinc diff --git a/lunaix-os/config/make-cc b/lunaix-os/makeinc/toolchain.mkinc similarity index 85% rename from lunaix-os/config/make-cc rename to lunaix-os/makeinc/toolchain.mkinc index 75b37f8..42fae9f 100644 --- a/lunaix-os/config/make-cc +++ b/lunaix-os/makeinc/toolchain.mkinc @@ -3,7 +3,7 @@ AS := i686-elf-as AR := i686-elf-ar -ARCH_OPT := -D__ARCH_IA32 -include flags.h +ARCH_OPT := -D__ARCH_IA32 O := -O2 W := -Wall -Wextra -Wno-unknown-pragmas \ -Wno-unused-function \ @@ -24,4 +24,6 @@ OFLAGS := -fno-gcse\ -fno-indirect-inlining CFLAGS := -std=gnu99 -ffreestanding $(O) $(OFLAGS) $(W) $(ARCH_OPT) -LDFLAGS := -ffreestanding $(O) -nostdlib -lgcc \ No newline at end of file +LDFLAGS := -ffreestanding $(O) -nostdlib -lgcc + +MKFLAGS := --no-print-directory \ No newline at end of file diff --git a/lunaix-os/makeinc/utils.mkinc b/lunaix-os/makeinc/utils.mkinc new file mode 100644 index 0000000..3975605 --- /dev/null +++ b/lunaix-os/makeinc/utils.mkinc @@ -0,0 +1,4 @@ +status = @printf " %-8s %s\n" $(1) $(2) +status_ := @printf " %-8s %s\n" $$(1) $$(2) + +export status_ diff --git a/lunaix-os/uprog/includes/ld/elf.h b/lunaix-os/uprog/includes/ld/elf.h new file mode 100644 index 0000000..c699605 --- /dev/null +++ b/lunaix-os/uprog/includes/ld/elf.h @@ -0,0 +1,67 @@ +#ifndef __LUNAIX_LD_ELF_H +#define __LUNAIX_LD_ELF_H + +typedef unsigned int elf32_ptr_t; +typedef unsigned short elf32_hlf_t; +typedef unsigned int elf32_off_t; +typedef unsigned int elf32_swd_t; +typedef unsigned int elf32_wrd_t; + +#define ET_NONE 0 +#define ET_EXEC 2 +#define ET_DYN 3 + +#define PT_LOAD 1 +#define PT_DYNAMIC 2 +#define PT_INTERP 3 + +#define PF_X 0x1 +#define PF_W 0x2 +#define PF_R 0x4 + +#define EM_NONE 0 +#define EM_386 3 + +#define EV_CURRENT 1 + +// [0x7f, 'E', 'L', 'F'] +#define ELFMAGIC 0x464c457fU +#define ELFCLASS32 1 +#define ELFCLASS64 2 +#define ELFDATA2LSB 1 +#define ELFDATA2MSB 2 + +#define EI_CLASS 4 +#define EI_DATA 5 + +struct elf32_ehdr +{ + unsigned char e_ident[16]; + elf32_hlf_t e_type; + elf32_hlf_t e_machine; + elf32_wrd_t e_version; + elf32_ptr_t e_entry; + elf32_off_t e_phoff; + elf32_off_t e_shoff; + elf32_wrd_t e_flags; + elf32_hlf_t e_ehsize; + elf32_hlf_t e_phentsize; + elf32_hlf_t e_phnum; + elf32_hlf_t e_shentsize; + elf32_hlf_t e_shnum; + elf32_hlf_t e_shstrndx; +}; + +struct elf32_phdr +{ + elf32_wrd_t p_type; + elf32_off_t p_offset; + elf32_ptr_t p_va; + elf32_ptr_t p_pa; + elf32_wrd_t p_filesz; + elf32_wrd_t p_memsz; + elf32_wrd_t p_flags; + elf32_wrd_t p_align; +}; + +#endif /* __LUNAIX_ELF_H */ diff --git a/lunaix-os/usr/api/errno.c b/lunaix-os/usr/api/errno.c deleted file mode 100644 index ac0d004..0000000 --- a/lunaix-os/usr/api/errno.c +++ /dev/null @@ -1,4 +0,0 @@ -#include -#include - -__LXSYSCALL(int, geterrno); \ No newline at end of file diff --git a/lunaix-os/usr/api/ioctl.c b/lunaix-os/usr/api/ioctl.c deleted file mode 100644 index bb2126a..0000000 --- a/lunaix-os/usr/api/ioctl.c +++ /dev/null @@ -1,4 +0,0 @@ -#include -#include - -__LXSYSCALL2_VARG(int, ioctl, int, fd, int, req); \ No newline at end of file diff --git a/lunaix-os/usr/includes b/lunaix-os/usr/includes new file mode 120000 index 0000000..6e4b52e --- /dev/null +++ b/lunaix-os/usr/includes @@ -0,0 +1 @@ +../includes/usr \ No newline at end of file diff --git a/lunaix-os/usr/includes/string.h b/lunaix-os/usr/includes/string.h deleted file mode 100644 index 7383a0f..0000000 --- a/lunaix-os/usr/includes/string.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef __LUNAIX_STRING_H -#define __LUNAIX_STRING_H - -#include - -size_t -strlen(const char* str); - -size_t -strnlen(const char* str, size_t max_len); - -char* -strncpy(char* dest, const char* src, size_t n); - -const char* -strchr(const char* str, int character); - -char* -strcpy(char* dest, const char* src); - -int -strcmp(const char* s1, const char* s2); - -#endif /* __LUNAIX_STRING_H */ diff --git a/lunaix-os/usr/includes/sys/mann.h b/lunaix-os/usr/includes/sys/mann.h deleted file mode 100644 index 0e424d4..0000000 --- a/lunaix-os/usr/includes/sys/mann.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef __LUNAIX_SYS_MANN_H -#define __LUNAIX_SYS_MANN_H - -#include -#include - -void* -mmap(void* addr, size_t length, int proct, int flags, int fd, off_t offset); - -void -munmap(void* addr, size_t length); - -#endif /* __LUNAIX_MANN_H */ diff --git a/lunaix-os/usr/includes/sys/mount.h b/lunaix-os/usr/includes/sys/mount.h deleted file mode 100644 index 5d12df8..0000000 --- a/lunaix-os/usr/includes/sys/mount.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef __LUNAIX_SYS_MOUNT_H -#define __LUNAIX_SYS_MOUNT_H - -#include - -int -mount(const char* source, const char* target, const char* fstype, int flags); - -int -unmount(const char* target); - -static inline int -umount(const char* target) -{ - return unmount(target); -} -#endif /* __LUNAIX_MOUNT_H */ diff --git a/lunaix-os/uprog/init.c b/lunaix-os/usr/init/init.c similarity index 96% rename from lunaix-os/uprog/init.c rename to lunaix-os/usr/init/init.c index b78cd3b..7e1785a 100644 --- a/lunaix-os/uprog/init.c +++ b/lunaix-os/usr/init/init.c @@ -1,7 +1,7 @@ #include #include +#include #include -#include #include int diff --git a/lunaix-os/usr/init/makefile b/lunaix-os/usr/init/makefile new file mode 100644 index 0000000..e087160 --- /dev/null +++ b/lunaix-os/usr/init/makefile @@ -0,0 +1,21 @@ +define src_files + init.c +endef + +obj_files := $(addsuffix .o,$(src_files)) +include_opt := $(addprefix -I,$(INCLUDES)) + +out := $(BUILD_DIR)/bin + +%.c.o: %.c + $(call status_,CC,$<) + @$(CC) $(CFLAGS) $(include_opt) -c $< -o $@ + +$(out)/$(BUILD_NAME): $(obj_files) + $(call status_,LD,$(@F)) + @$(CC) -T $(LD_SCRIPT) -o $@ $< $(LIBC) $(LDFLAGS) + +all: $(out)/$(BUILD_NAME) + +clean: + @rm -f $(obj_files) \ No newline at end of file diff --git a/lunaix-os/usr/uwrap.S b/lunaix-os/usr/libc/arch/i386/crt0.S similarity index 62% rename from lunaix-os/usr/uwrap.S rename to lunaix-os/usr/libc/arch/i386/crt0.S index 84fe24e..28aa6ba 100644 --- a/lunaix-os/usr/uwrap.S +++ b/lunaix-os/usr/libc/arch/i386/crt0.S @@ -1,5 +1,5 @@ #define __ASM__ -#include +#include .section .data .global environ @@ -7,14 +7,14 @@ .long 0 .section .text - .global _u_start - _u_start: + .global _start + _start: xorl %eax, %eax call main 1: movl %eax, %ebx movl $__SYSCALL__exit, %eax - int $LUNAIX_SYS_CALL + int $33 ud2 // should not reach \ No newline at end of file diff --git a/lunaix-os/usr/api/dirent.c b/lunaix-os/usr/libc/arch/i386/dirent.c similarity index 55% rename from lunaix-os/usr/api/dirent.c rename to lunaix-os/usr/libc/arch/i386/dirent.c index e309582..1c45242 100644 --- a/lunaix-os/usr/api/dirent.c +++ b/lunaix-os/usr/libc/arch/i386/dirent.c @@ -1,4 +1,4 @@ -#include -#include +#include "syscall.h" +#include __LXSYSCALL2(int, sys_readdir, int, fd, struct lx_dirent*, dent) diff --git a/lunaix-os/usr/libc/arch/i386/errno.c b/lunaix-os/usr/libc/arch/i386/errno.c new file mode 100644 index 0000000..3ad6d52 --- /dev/null +++ b/lunaix-os/usr/libc/arch/i386/errno.c @@ -0,0 +1,4 @@ +#include "syscall.h" +#include + +__LXSYSCALL(int, geterrno); \ No newline at end of file diff --git a/lunaix-os/usr/api/fcntl.c b/lunaix-os/usr/libc/arch/i386/fcntl.c similarity index 73% rename from lunaix-os/usr/api/fcntl.c rename to lunaix-os/usr/libc/arch/i386/fcntl.c index 92e2fa3..5f28766 100644 --- a/lunaix-os/usr/api/fcntl.c +++ b/lunaix-os/usr/libc/arch/i386/fcntl.c @@ -1,4 +1,4 @@ -#include +#include "syscall.h" #include __LXSYSCALL2(int, open, const char*, path, int, options) diff --git a/lunaix-os/usr/libc/arch/i386/ioctl.c b/lunaix-os/usr/libc/arch/i386/ioctl.c new file mode 100644 index 0000000..8675d22 --- /dev/null +++ b/lunaix-os/usr/libc/arch/i386/ioctl.c @@ -0,0 +1,4 @@ +#include "syscall.h" +#include + +__LXSYSCALL2_VARG(int, ioctl, int, fd, int, req); \ No newline at end of file diff --git a/lunaix-os/usr/api/lunaix.c b/lunaix-os/usr/libc/arch/i386/lunaix.c similarity index 83% rename from lunaix-os/usr/api/lunaix.c rename to lunaix-os/usr/libc/arch/i386/lunaix.c index 59fe79a..87f30bb 100644 --- a/lunaix-os/usr/api/lunaix.c +++ b/lunaix-os/usr/libc/arch/i386/lunaix.c @@ -1,5 +1,5 @@ -#include -#include +#include "syscall.h" +#include __LXSYSCALL(void, yield); diff --git a/lunaix-os/usr/api/mann.c b/lunaix-os/usr/libc/arch/i386/mann.c similarity index 84% rename from lunaix-os/usr/api/mann.c rename to lunaix-os/usr/libc/arch/i386/mann.c index e211cad..b21ea3f 100644 --- a/lunaix-os/usr/api/mann.c +++ b/lunaix-os/usr/libc/arch/i386/mann.c @@ -1,5 +1,5 @@ -#include -#include +#include "syscall.h" +#include __LXSYSCALL2_VARG(void*, sys_mmap, void*, addr, size_t, length); diff --git a/lunaix-os/usr/api/mount.c b/lunaix-os/usr/libc/arch/i386/mount.c similarity index 69% rename from lunaix-os/usr/api/mount.c rename to lunaix-os/usr/libc/arch/i386/mount.c index 854c96b..637f451 100644 --- a/lunaix-os/usr/api/mount.c +++ b/lunaix-os/usr/libc/arch/i386/mount.c @@ -1,5 +1,4 @@ -#include -#include +#include "syscall.h" __LXSYSCALL4(int, mount, diff --git a/lunaix-os/usr/api/signal.c b/lunaix-os/usr/libc/arch/i386/signal.c similarity index 86% rename from lunaix-os/usr/api/signal.c rename to lunaix-os/usr/libc/arch/i386/signal.c index 191e8d8..681f193 100644 --- a/lunaix-os/usr/api/signal.c +++ b/lunaix-os/usr/libc/arch/i386/signal.c @@ -1,5 +1,5 @@ -#include -#include +#include "syscall.h" +#include __LXSYSCALL2(int, signal, int, signum, sighandler_t, handler); diff --git a/lunaix-os/usr/libc/arch/i386/syscall.h b/lunaix-os/usr/libc/arch/i386/syscall.h new file mode 100644 index 0000000..4747678 --- /dev/null +++ b/lunaix-os/usr/libc/arch/i386/syscall.h @@ -0,0 +1,69 @@ +#ifndef __LUNAIX_SYSCALL_H +#define __LUNAIX_SYSCALL_H +#include + +#define asmlinkage __attribute__((regparm(0))) + +#define __PARAM_MAP1(t1, p1) t1 p1 +#define __PARAM_MAP2(t1, p1, ...) t1 p1, __PARAM_MAP1(__VA_ARGS__) +#define __PARAM_MAP3(t1, p1, ...) t1 p1, __PARAM_MAP2(__VA_ARGS__) +#define __PARAM_MAP4(t1, p1, ...) t1 p1, __PARAM_MAP3(__VA_ARGS__) +#define __PARAM_MAP5(t1, p1, ...) t1 p1, __PARAM_MAP4(__VA_ARGS__) +#define __PARAM_MAP6(t1, p1, ...) t1 p1, __PARAM_MAP5(__VA_ARGS__) + +#define ___DOINT33(callcode, rettype) \ + int v; \ + asm volatile("int %1\n" : "=a"(v) : "i"(33), "a"(callcode)); \ + return (rettype)v; + +#define __LXSYSCALL(rettype, name) \ + rettype name() \ + { \ + ___DOINT33(__SYSCALL_##name, rettype) \ + } + +#define __LXSYSCALL1(rettype, name, t1, p1) \ + rettype name(__PARAM_MAP1(t1, p1)) \ + { \ + asm("" ::"b"(p1)); \ + ___DOINT33(__SYSCALL_##name, rettype) \ + } + +#define __LXSYSCALL2(rettype, name, t1, p1, t2, p2) \ + rettype name(__PARAM_MAP2(t1, p1, t2, p2)) \ + { \ + asm("\n" ::"b"(p1), "c"(p2)); \ + ___DOINT33(__SYSCALL_##name, rettype) \ + } + +#define __LXSYSCALL3(rettype, name, t1, p1, t2, p2, t3, p3) \ + rettype name(__PARAM_MAP3(t1, p1, t2, p2, t3, p3)) \ + { \ + asm("\n" ::"b"(p1), "c"(p2), "d"(p3)); \ + ___DOINT33(__SYSCALL_##name, rettype) \ + } + +#define __LXSYSCALL4(rettype, name, t1, p1, t2, p2, t3, p3, t4, p4) \ + rettype name(__PARAM_MAP4(t1, p1, t2, p2, t3, p3, t4, p4)) \ + { \ + asm("\n" ::"b"(p1), "c"(p2), "d"(p3), "D"(p4)); \ + ___DOINT33(__SYSCALL_##name, rettype) \ + } + +#define __LXSYSCALL5(rettype, name, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5) \ + rettype name(__PARAM_MAP5(t1, p1, t2, p2, t3, p3, t4, p4, t5, p5)) \ + { \ + asm("" ::"r"(p5), "b"(p1), "c"(p2), "d"(p3), "D"(p4), "S"(p5)); \ + ___DOINT33(__SYSCALL_##name, rettype) \ + } + +#define __LXSYSCALL2_VARG(rettype, name, t1, p1, t2, p2) \ + __attribute__((noinline)) rettype name(__PARAM_MAP2(t1, p1, t2, p2), ...) \ + { \ + /* No inlining! This depends on the call frame assumption */ \ + void* _last = (void*)&p2 + sizeof(void*); \ + asm("\n" ::"b"(p1), "c"(p2), "d"(_last)); \ + ___DOINT33(__SYSCALL_##name, rettype) \ + } + +#endif /* __LUNAIX_SYSCALL_H */ diff --git a/lunaix-os/usr/api/unistd.c b/lunaix-os/usr/libc/arch/i386/unistd.c similarity index 97% rename from lunaix-os/usr/api/unistd.c rename to lunaix-os/usr/libc/arch/i386/unistd.c index 088c335..9790cb1 100644 --- a/lunaix-os/usr/api/unistd.c +++ b/lunaix-os/usr/libc/arch/i386/unistd.c @@ -1,5 +1,5 @@ -#include -#include +#include "syscall.h" +#include __LXSYSCALL(pid_t, fork) diff --git a/lunaix-os/usr/includes/dirent.h b/lunaix-os/usr/libc/includes/dirent.h similarity index 68% rename from lunaix-os/usr/includes/dirent.h rename to lunaix-os/usr/libc/includes/dirent.h index 78d57e3..9748c8c 100644 --- a/lunaix-os/usr/includes/dirent.h +++ b/lunaix-os/usr/libc/includes/dirent.h @@ -1,7 +1,7 @@ #ifndef __LUNAIX_SYS_DIRENT_H #define __LUNAIX_SYS_DIRENT_H -#include +#include typedef struct { @@ -15,13 +15,16 @@ struct dirent char d_name[256]; }; -DIR* +extern DIR* opendir(const char* dirp); -int +extern int closedir(DIR* dirp); -struct dirent* +extern struct dirent* readdir(DIR* dir); +extern int +sys_readdir(int fd, struct lx_dirent* dirent); + #endif /* __LUNAIX_DIRENT_H */ diff --git a/lunaix-os/usr/libc/includes/errno.h b/lunaix-os/usr/libc/includes/errno.h new file mode 100644 index 0000000..4377190 --- /dev/null +++ b/lunaix-os/usr/libc/includes/errno.h @@ -0,0 +1,10 @@ +#ifndef __LUNAIX_SYS_ERRNO_H +#define __LUNAIX_SYS_ERRNO_H + +#include + +extern int geterrno(); + +#define errno (geterrno()) + +#endif /* __LUNAIX_ERRNO_H */ diff --git a/lunaix-os/usr/includes/fcntl.h b/lunaix-os/usr/libc/includes/fcntl.h similarity index 64% rename from lunaix-os/usr/includes/fcntl.h rename to lunaix-os/usr/libc/includes/fcntl.h index 0ce31d8..b013d70 100644 --- a/lunaix-os/usr/includes/fcntl.h +++ b/lunaix-os/usr/libc/includes/fcntl.h @@ -1,10 +1,10 @@ #ifndef __LUNAIX_SYS_FCNTL_H #define __LUNAIX_SYS_FCNTL_H -#include -#include +#include +#include -int +extern int open(const char* path, int flags); #endif /* __LUNAIX_FCNTL_H */ diff --git a/lunaix-os/usr/includes/sys/ioctl.h b/lunaix-os/usr/libc/includes/lunaix/ioctl.h similarity index 58% rename from lunaix-os/usr/includes/sys/ioctl.h rename to lunaix-os/usr/libc/includes/lunaix/ioctl.h index 58c681a..b185ac2 100644 --- a/lunaix-os/usr/includes/sys/ioctl.h +++ b/lunaix-os/usr/libc/includes/lunaix/ioctl.h @@ -1,9 +1,8 @@ #ifndef __LUNAIX_SYS_IOCTL_H #define __LUNAIX_SYS_IOCTL_H -#include +#include -int -ioctl(int fd, int req, ...); +int ioctl(int fd, int req, ...); #endif /* __LUNAIX_IOCTL_H */ diff --git a/lunaix-os/usr/includes/sys/lunaix.h b/lunaix-os/usr/libc/includes/lunaix/lunaix.h similarity index 91% rename from lunaix-os/usr/includes/sys/lunaix.h rename to lunaix-os/usr/libc/includes/lunaix/lunaix.h index febcb59..172056c 100644 --- a/lunaix-os/usr/includes/sys/lunaix.h +++ b/lunaix-os/usr/libc/includes/lunaix/lunaix.h @@ -1,7 +1,7 @@ #ifndef __LUNAIX_SYS_LUNAIX_H #define __LUNAIX_SYS_LUNAIX_H -#include +#include void yield(); diff --git a/lunaix-os/usr/libc/includes/lunaix/mann.h b/lunaix-os/usr/libc/includes/lunaix/mann.h new file mode 100644 index 0000000..1e79912 --- /dev/null +++ b/lunaix-os/usr/libc/includes/lunaix/mann.h @@ -0,0 +1,11 @@ +#ifndef __LUNAIX_SYS_MANN_H +#define __LUNAIX_SYS_MANN_H + +#include +#include + +extern void* mmap(void* addr, size_t length, int proct, int flags, int fd, off_t offset); + +extern void munmap(void* addr, size_t length); + +#endif /* __LUNAIX_MANN_H */ diff --git a/lunaix-os/usr/libc/includes/lunaix/mount.h b/lunaix-os/usr/libc/includes/lunaix/mount.h new file mode 100644 index 0000000..4f41c70 --- /dev/null +++ b/lunaix-os/usr/libc/includes/lunaix/mount.h @@ -0,0 +1,14 @@ +#ifndef __LUNAIX_SYS_MOUNT_H +#define __LUNAIX_SYS_MOUNT_H + +#include + +extern int mount(const char* source, const char* target, const char* fstype, int flags); + +extern int unmount(const char* target); + +static inline int umount(const char* target) +{ + return unmount(target); +} +#endif /* __LUNAIX_MOUNT_H */ diff --git a/lunaix-os/usr/includes/signal.h b/lunaix-os/usr/libc/includes/signal.h similarity index 71% rename from lunaix-os/usr/includes/signal.h rename to lunaix-os/usr/libc/includes/signal.h index 56da91e..0e6cce2 100644 --- a/lunaix-os/usr/includes/signal.h +++ b/lunaix-os/usr/libc/includes/signal.h @@ -1,19 +1,19 @@ #ifndef __LUNAIX_SYS_SIGNAL_H #define __LUNAIX_SYS_SIGNAL_H -#include -#include +#include +#include -int +extern int signal(int signum, sighandler_t handler); -int +extern int sigpending(sigset_t* set); -int +extern int sigsuspend(const sigset_t* mask); -int +extern int sigprocmask(int how, const sigset_t* set, sigset_t* oldset); #endif /* __LUNAIX_SIGNAL_H */ diff --git a/lunaix-os/usr/includes/stdio.h b/lunaix-os/usr/libc/includes/stdio.h similarity index 93% rename from lunaix-os/usr/includes/stdio.h rename to lunaix-os/usr/libc/includes/stdio.h index 0ef2e14..26c9b56 100644 --- a/lunaix-os/usr/includes/stdio.h +++ b/lunaix-os/usr/libc/includes/stdio.h @@ -4,7 +4,7 @@ #define stdout 0 #define stdin 1 -int +extern int printf(const char* fmt, ...); #endif /* __LUNAIX_USTDIO_H */ diff --git a/lunaix-os/usr/includes/stdlib.h b/lunaix-os/usr/libc/includes/stdlib.h similarity index 62% rename from lunaix-os/usr/includes/stdlib.h rename to lunaix-os/usr/libc/includes/stdlib.h index 0e38fb5..72bd663 100644 --- a/lunaix-os/usr/includes/stdlib.h +++ b/lunaix-os/usr/libc/includes/stdlib.h @@ -1,7 +1,6 @@ #ifndef __LUNAIX_STDLIB_H #define __LUNAIX_STDLIB_H -char* -itoa(int value, char* str, int base); +extern char* itoa(int value, char* str, int base); #endif /* __LUNAIX_STDLIB_H */ diff --git a/lunaix-os/usr/libc/includes/string.h b/lunaix-os/usr/libc/includes/string.h new file mode 100644 index 0000000..e9313b7 --- /dev/null +++ b/lunaix-os/usr/libc/includes/string.h @@ -0,0 +1,18 @@ +#ifndef __LUNAIX_STRING_H +#define __LUNAIX_STRING_H + +#include + +extern size_t strlen(const char* str); + +extern size_t strnlen(const char* str, size_t max_len); + +extern char* strncpy(char* dest, const char* src, size_t n); + +extern const char* strchr(const char* str, int character); + +extern char* strcpy(char* dest, const char* src); + +extern int strcmp(const char* s1, const char* s2); + +#endif /* __LUNAIX_STRING_H */ diff --git a/lunaix-os/usr/includes/unistd.h b/lunaix-os/usr/libc/includes/unistd.h similarity index 75% rename from lunaix-os/usr/includes/unistd.h rename to lunaix-os/usr/libc/includes/unistd.h index 8420ffa..24e519f 100644 --- a/lunaix-os/usr/includes/unistd.h +++ b/lunaix-os/usr/libc/includes/unistd.h @@ -1,116 +1,116 @@ #ifndef __LUNAIX_SYS_UNISTD_H #define __LUNAIX_SYS_UNISTD_H -#include +#include extern const char** environ; -pid_t +extern pid_t fork(); -pid_t +extern pid_t getpid(); -pid_t +extern pid_t getppid(); -pid_t +extern pid_t getpgid(); -pid_t +extern pid_t setpgid(pid_t pid, pid_t pgid); -int +extern int brk(void* addr); -void* +extern void* sbrk(ssize_t size); -void +extern void _exit(int status); -unsigned int +extern unsigned int sleep(unsigned int); -int +extern int pause(); -int +extern int kill(pid_t pid, int signum); -unsigned int +extern unsigned int alarm(unsigned int seconds); -int +extern int link(const char* oldpath, const char* newpath); -int +extern int rmdir(const char* pathname); -int +extern int read(int fd, void* buf, size_t size); -int +extern int write(int fd, void* buf, size_t size); -int +extern int readlink(const char* path, char* buffer, size_t size); -int +extern int readlinkat(int dirfd, const char* pathname, char* buffer, size_t size); -int +extern int lseek(int fd, off_t offset, int mode); -int +extern int unlink(const char* pathname); -int +extern int unlinat(int fd, const char* pathname); -int +extern int mkdir(const char* path); -int +extern int close(int fd); -int +extern int dup2(int oldfd, int newfd); -int +extern int dup(int oldfd); -int +extern int fsync(int fd); -int +extern int symlink(const char* pathname, const char* linktarget); -int +extern int chdir(const char* path); -int +extern int fchdir(int fd); -char* +extern char* getcwd(char* buf, size_t size); -int +extern int rename(const char* oldpath, const char* newpath); -int +extern int getxattr(const char* path, const char* name, void* value, size_t len); -int +extern int setxattr(const char* path, const char* name, void* value, size_t len); -int +extern int fgetxattr(int fd, const char* name, void* value, size_t len); -int +extern int fsetxattr(int fd, const char* name, void* value, size_t len); -int +extern int execve(const char* filename, const char* argv[], const char* envp[]); #endif /* __LUNAIX_UNISTD_H */ diff --git a/lunaix-os/usr/libc/makefile b/lunaix-os/usr/libc/makefile new file mode 100644 index 0000000..3d976cb --- /dev/null +++ b/lunaix-os/usr/libc/makefile @@ -0,0 +1,50 @@ +libc_include := $(CURDIR)/includes + +ARCH ?= i386 +BUILD_DIR ?= bin +BUILD_NAME ?= liblunac + +src_dirs := src +src_dirs += arch/$(ARCH) + +src_files := $(foreach f, $(src_dirs), $(shell find $(f) -name "*.[cS]")) +obj_files := $(addsuffix .o, $(src_files)) + +build_lib := $(BUILD_DIR)/lib +build_include := $(BUILD_DIR)/includes + +libc_include_opt = $(addprefix -I, $(libc_include)) +global_include_opt = $(addprefix -I, $(INCLUDES)) + +check_folders := $(src_dirs) +check_folders += $(build_lib) $(build_include) + +$(BUILD_DIR): + @mkdir -p bin + +%.check: + @if [ ! -d "$*" ]; then \ + echo "'$*' is not exists" && exit 1;\ + fi + +%.c.o: %.c + @$(call status_,CC,$@) + @$(CC) $(CFLAGS) $(libc_include_opt) $(global_include_opt) -c $< -o $@ + +%.S.o: %.S + @$(call status_,CC,$@) + @$(CC) $(libc_include_opt) $(global_include_opt) -c $< -o $@ + +$(build_lib)/$(BUILD_NAME): $(obj_files) + @$(call status_,AR,$(*F)) + @$(AR) rcs $@ $^ + +clean: + @rm -f $(obj_files) + +headers: $(libc_include) + @$(call status_,INSTALL,$( #include #include -#include #include DIR* diff --git a/lunaix-os/usr/libc/string.c b/lunaix-os/usr/libc/src/string.c similarity index 100% rename from lunaix-os/usr/libc/string.c rename to lunaix-os/usr/libc/src/string.c diff --git a/lunaix-os/usr/link-usr.ld b/lunaix-os/usr/link-usr.ld index 49fb4c9..c069939 100644 --- a/lunaix-os/usr/link-usr.ld +++ b/lunaix-os/usr/link-usr.ld @@ -1,4 +1,4 @@ -ENTRY(_u_start) +ENTRY(_start) SECTIONS { . = 0x400000; diff --git a/lunaix-os/uprog/ls.c b/lunaix-os/usr/ls/ls.c similarity index 100% rename from lunaix-os/uprog/ls.c rename to lunaix-os/usr/ls/ls.c diff --git a/lunaix-os/usr/ls/makefile b/lunaix-os/usr/ls/makefile new file mode 100644 index 0000000..5351d43 --- /dev/null +++ b/lunaix-os/usr/ls/makefile @@ -0,0 +1,21 @@ +define src_files + ls.c +endef + +obj_files := $(addsuffix .o,$(src_files)) +include_opt := $(addprefix -I,$(INCLUDES)) + +out := $(BUILD_DIR)/bin + +%.c.o: %.c + $(call status_,CC,$<) + @$(CC) $(CFLAGS) $(include_opt) -c $< -o $@ + +$(out)/$(BUILD_NAME): $(obj_files) + $(call status_,LD,$(@F)) + @$(CC) -T $(LD_SCRIPT) -o $@ $< $(LIBC) $(LDFLAGS) + +all: $(out)/$(BUILD_NAME) + +clean: + @rm -f $(obj_files) \ No newline at end of file diff --git a/lunaix-os/usr/makefile b/lunaix-os/usr/makefile new file mode 100644 index 0000000..942a5e6 --- /dev/null +++ b/lunaix-os/usr/makefile @@ -0,0 +1,54 @@ +include utils.mkinc +include toolchain.mkinc + +task := all + +sys_include := $(CURDIR)/includes +build_dir := $(CURDIR)/build +libc_name := liblunac +libc_files := $(libc_name).a + +common_param := CC AR INCLUDES BUILD_DIR BUILD_NAME CFLAGS LDFLAGS + +INCLUDES := $(sys_include) +BUILD_DIR := $(build_dir) +BUILD_NAME := $(libc_name).a + +$(build_dir)/bin: + @mkdir -p $(build_dir)/bin + +$(build_dir)/lib: + @mkdir -p $(build_dir)/lib + +$(build_dir)/includes: + @mkdir -p $(build_dir)/includes + +export $(common_param) +$(build_dir)/$(libc_name).a: $(build_dir)/bin $(build_dir)/lib $(build_dir)/includes + $(call status,TASK,$(BUILD_NAME)) + @$(MAKE) $(MKFLAGS) -C libc/ $(task) + +app-list := ls +app-list += init +app-list += signal_demo +app-list += sh + +mkapp-list := $(addprefix app-, $(app-list)) + +export LD_SCRIPT := $(CURDIR)/link-usr.ld +export LIBC := $(addprefix $(build_dir)/lib/,$(libc_files)) +app-%: + $(call status,TASK,$*) + @$(MAKE) $(MKFLAGS) -C $* $(task) BUILD_NAME="$*" + +app: task := all +app: INCLUDES += $(build_dir)/includes +app: $(mkapp-list) + +clean: task := clean +clean: $(mkapp-list) + @rm -rf $(build_dir) + @$(MAKE) $(MKFLAGS) -C libc/ $(task) + +all: task := all +all: $(build_dir)/$(libc_name).a app \ No newline at end of file diff --git a/lunaix-os/usr/sh/makefile b/lunaix-os/usr/sh/makefile new file mode 100644 index 0000000..bc10a4d --- /dev/null +++ b/lunaix-os/usr/sh/makefile @@ -0,0 +1,21 @@ +define src_files + sh.c +endef + +obj_files := $(addsuffix .o,$(src_files)) +include_opt := $(addprefix -I,$(INCLUDES)) + +out := $(BUILD_DIR)/bin + +%.c.o: %.c + $(call status_,CC,$<) + @$(CC) $(CFLAGS) $(include_opt) -c $< -o $@ + +$(out)/$(BUILD_NAME): $(obj_files) + $(call status_,LD,$(@F)) + @$(CC) -T $(LD_SCRIPT) -o $@ $< $(LIBC) $(LDFLAGS) + +all: $(out)/$(BUILD_NAME) + +clean: + @rm -f $(obj_files) \ No newline at end of file diff --git a/lunaix-os/uprog/sh.c b/lunaix-os/usr/sh/sh.c similarity index 98% rename from lunaix-os/uprog/sh.c rename to lunaix-os/usr/sh/sh.c index 616fa67..8ce8617 100644 --- a/lunaix-os/uprog/sh.c +++ b/lunaix-os/usr/sh/sh.c @@ -1,9 +1,9 @@ #include +#include +#include #include #include #include -#include -#include #include char pwd[512]; diff --git a/lunaix-os/usr/signal_demo/makefile b/lunaix-os/usr/signal_demo/makefile new file mode 100644 index 0000000..1bb1248 --- /dev/null +++ b/lunaix-os/usr/signal_demo/makefile @@ -0,0 +1,21 @@ +define src_files + signal_demo.c +endef + +obj_files := $(addsuffix .o,$(src_files)) +include_opt := $(addprefix -I,$(INCLUDES)) + +out := $(BUILD_DIR)/bin + +%.c.o: %.c + $(call status_,CC,$<) + @$(CC) $(CFLAGS) $(include_opt) -c $< -o $@ + +$(out)/$(BUILD_NAME): $(obj_files) + $(call status_,LD,$(@F)) + @$(CC) -T $(LD_SCRIPT) -o $@ $< $(LIBC) $(LDFLAGS) + +all: $(out)/$(BUILD_NAME) + +clean: + @rm -f $(obj_files) \ No newline at end of file diff --git a/lunaix-os/uprog/signal_demo.c b/lunaix-os/usr/signal_demo/signal_demo.c similarity index 98% rename from lunaix-os/uprog/signal_demo.c rename to lunaix-os/usr/signal_demo/signal_demo.c index 8a9bdc6..612e132 100644 --- a/lunaix-os/uprog/signal_demo.c +++ b/lunaix-os/usr/signal_demo/signal_demo.c @@ -1,6 +1,6 @@ +#include #include #include -#include #include void -- 2.27.0