Commit Graph

226 Commits

Author SHA1 Message Date
Bananymous d7a00e8cc2 LibC: Implement stpcpy since gcc seems to need it
gcc seems to optimize some calls to strcpy to stpcpy
2023-09-30 20:58:19 +03:00
Bananymous 9f0797047f Kernel/LibC: dirent now contains file type 2023-09-30 20:46:57 +03:00
Bananymous 23f429e23b LibC: Fix mmap()
mmap() did not pass fildes to the syscall structure.
2023-09-29 17:24:21 +03:00
Bananymous 48096b18c2 LibC: mmap returns MAP_FAILED instead of NULL 2023-09-29 10:38:08 +03:00
Bananymous 15cd59b8ce LibC: Fix a bug in malloc
You could not allocate with size equal to one of the pool sizes.
2023-09-28 21:05:27 +03:00
Bananymous 6eda65eea6 Kernel/LibC/Userspace: Add SYS_POWEROFF + cli tool
You can now shutdown/reboot banan-os with the poweroff cli tool.

Reboot doesn't seem to work on qemu.
2023-09-28 12:36:47 +03:00
Bananymous 1abf787596 LibC: Add errno for unknown error 2023-09-28 12:06:17 +03:00
Bananymous 61694268e2 LibC: Implement length modifiers to printf 2023-09-28 11:42:57 +03:00
Bananymous cb76f1ea75 Kernel: Add some functionality to disable TTY input/output
Userspace programs can call tty_ctrl() to disable/enable tty from
handling input and displaying output.

This API is probably going to change in the future to ioctl calls
but I'm not sure how ioctl is used and what functionality should it
have. I decided to create whole new function and syscall for now.

Next I will expose framebuffer in /dev/fb0 and then I can start work
on graphical environment! :D
2023-09-27 15:44:05 +03:00
Bananymous a69e5fb288 LibC: add syncsync() to unistd.h
This is my own WELL NAMED (:D) function that takes a paramemeter
to make the sync operation synchronous.
2023-09-27 00:35:36 +03:00
Bananymous 3ba15b41a3 Kernel/LibC: remove PATH resoltion from kernel
I have no idea why I had made PATH environment variable parsing
to be part of the kernel. Now the shell does the parsing and
environment syscall is no longer needed.
2023-09-23 03:08:14 +03:00
Bananymous 7a7c5e433e Kernel/LibC: add flag to enable/disable sse support
SSE support is very experimental and causes GP. I decided to make
SSE not default until I get to fixing it :)
2023-09-23 02:28:25 +03:00
Bananymous 6bb2c80bdd Kernel/LibC: userspace malloc now uses mmap to get memory
We could remove syscalls to allocate more memory. This was not
something the kernel should have done.
2023-09-23 02:26:23 +03:00
Bananymous af4af1cae9 Kernel/LibC: add mmap for private anonymous mappings
This will be used by the userspace to get more memory. Currently
kernel handles all allocations, which is not preferable.
2023-09-22 23:01:14 +03:00
Bananymous 63dc2b6aa6 Kernel: Implement SYS_SYNC and add sync executable to userspace
You can (and have to) manually sync disk after writes to it.
2023-09-11 01:26:27 +03:00
Bananymous 921d95d18f All: Clear lines with only whitspace in them 2023-09-10 00:31:42 +03:00
Bananymous 39a5c52088 Kernel: Fix directory permissions
We did not care about X bit in directories and instead used only the
R bit for search/read.
2023-09-08 11:46:53 +03:00
Bananymous 5972c73950 LibC: fix fread implementation
fread() should read until either size*nitems bytes are read or eof
is reached.
2023-09-07 16:00:47 +03:00
Bananymous 7184514b5d LibC: add time() implementation 2023-09-04 13:52:58 +03:00
Bananymous dfb18d38f7 LibC: Add rand() and srand() implementation
This code is from the wikipedia page for Permuted congruential generator
2023-09-04 13:52:13 +03:00
Bananymous 9901f95d78 Kernel: Add basic nanosleep, only millisecond percision 2023-09-04 12:59:50 +03:00
Bananymous 6f002c926a Kernel: add basic fcntl() with couple of commands and no validation 2023-09-04 12:57:09 +03:00
Bananymous 8032824054 BuildSystem: use -a with rsync
This allows cmake to not rebuild whole project every time
2023-08-28 11:38:17 +03:00
Bananymous 7aaea786c2 LibC: Don't undef needed values in inttypes.h 2023-08-24 15:48:14 +03:00
Bananymous 80e7a89f67 BuildSystem: Base sysroot is now distributed as a tar ball
This allows file and directory permissions work as intended.

cmake is now filled with 'sudo' but with sudo timeout this should be
fine.
2023-08-23 10:38:21 +03:00
Bananymous 60a2185ee6 Kernel/LibC: implement proper getpgid and setpgid 2023-08-22 14:53:12 +03:00
Bananymous c9243f0d1e Kernel/LibC: Add {get,set}pgrp() 2023-08-22 11:36:33 +03:00
Bananymous b5a7246ba7 LibC: make printf buffer only 128 bytes
Only reason for it to be big is if you want super large zero padding
for your number. This will eventually be handled without the buffer.
2023-08-18 16:49:27 +03:00
Bananymous 0abe30af38 BuildSystem: only apply stack usage warning to libc 2023-08-17 20:49:52 +03:00
Bananymous 85c6149138 LibC: add fileno() and fdopen()
fdopen() doesn't currently care about mode and will have same mode
as the underlying file descriptor.
2023-08-17 12:03:59 +03:00
Bananymous 79f3aa5419 Kernel/LibC: add dup() syscall and function 2023-08-17 12:03:29 +03:00
Bananymous 569e76a848 LibC: printf handles nan and inf 2023-08-16 10:49:34 +03:00
Bananymous 3a36c30e80 LibC: math.h defines is*() macros and uses builtins for values 2023-08-16 10:41:55 +03:00
Bananymous 9ab7e76a3b LibC: cleanup fstatat 2023-08-11 12:25:15 +03:00
Bananymous 9cb50cba33 LibC: Fix S_IF* macros and add macros for access/type masks 2023-08-11 10:30:50 +03:00
Bananymous e715d52f80 LibC: fix typo 2023-08-02 22:10:12 +03:00
Bananymous b4eddf04c4 LibC: sys/wait.h now has proper exit status macros
We use the same format as basically every implementation
2023-08-01 10:32:04 +03:00
Bananymous 2a851b52f1 BuildSystem: Edit build flags regarding sse and warnings 2023-07-31 22:31:17 +03:00
Bananymous 834bf33e57 LibC: we don't parse syscall arguments in unistd
We just call Kernel::syscall() with 5 arguments from the variadic function.

This was a necessary addition since the syscall() function
used over 2 KiB of stack space.
2023-07-31 22:24:11 +03:00
Bananymous f6ee4b3496 Kernel: Implement SYS_GET_PID and SYS_TCSETPGID
we don't have consept of process groups yet
2023-07-24 22:29:59 +03:00
Bananymous 2dce0a0415 Kernel: Userspace signal handlers are now called one at a time
I added a syscall for telling the kernel when signal execution has
finished. We should send a random hash or id to the signal trampoline
that we would include in the syscall, so validity of signal exit can
be confirmed.
2023-07-23 13:34:53 +03:00
Bananymous d560137ae6 Kernel/LibC: add SYS_SIGNAL/signal() 2023-07-21 20:08:13 +03:00
Bananymous c12f4fb40f Kernel: Make signals more POSIX 2023-07-21 20:01:12 +03:00
Bananymous 10169d773d Kernel/LibC: Add SYS_KILL/kill() 2023-07-21 19:27:38 +03:00
Bananymous c2cf98e32f Kernel/LibC: Add bareboness signals
You can now call raise() to raise a signal. Signal handlers are
not yet supported, but the handling works :)
2023-07-21 15:45:02 +03:00
Bananymous 4154f43b49 LibC: add getpwname() and getpwuid() 2023-07-13 12:01:16 +03:00
Bananymous b1fcb0b58f LibC: implement endpwent(), getpwent() and setpwent() 2023-07-13 11:22:09 +03:00
Bananymous f7c4bc908e Kernel: open() and openat() now take mode as parameter
O_CREAT now tries to create file if O_CREAT is specified
2023-07-10 15:08:54 +03:00
Bananymous 51e4b11890 LibC: add NAME_MAX to limits.h
This is defined to 255 which is _XOPEN_NAME_MAX, smallest value
for XOPEN compliance
2023-07-10 11:48:11 +03:00
Bananymous a337f414fc LibC: limits.h now defined OPEN_MAX 2023-07-07 23:08:49 +03:00
Bananymous 07fec6e211 Kernel/LibC: add basic dup2 2023-07-06 23:17:54 +03:00
Bananymous 4cd72992c8 Kernel/LibC: Add basic pipe() syscall and command
You can now create pipes :)
2023-07-06 22:16:26 +03:00
Bananymous cdcb395640 LibC: add read() and write() to unistd 2023-07-06 22:15:55 +03:00
Bananymous 1fb305fa45 Kernel/LibC: add clock_gettime() for CLOCK_MONOTONIC
This gets the number of milliseconds since boot
2023-07-06 00:38:29 +03:00
Bananymous 60fe5a656c LibC: Fix syscall SYS_READ and SYS_WRITE arguments 2023-06-19 10:38:29 +03:00
Bananymous f09b82c4b5 Kernel/LibC: add SYS_{SET,GET}_PWD and chdir, getpwd 2023-06-12 02:02:52 +03:00
Bananymous 11b68f6a53 Kernel: Add SYS_GET_{,E}{UID,GID} 2023-06-11 22:37:00 +03:00
Bananymous 3fe67e4882 Kernel: Add syscalls for set{,e,re}{uid,gid} 2023-06-11 22:37:00 +03:00
Bananymous 9288537949 LibC: gid_t and id_t are now signed types
I have no idea why I had made them unisigned
2023-06-11 22:37:00 +03:00
Bananymous 78536f9678 Kernel/Userspace: Add basic init process
This process parses /etc/passwd and promps login screen.
When an username is entered, it will launch that users shell
2023-06-11 22:37:00 +03:00
Bananymous 297141f321 LibC: add strchrnul()
this is a gnu libc extension
2023-06-11 20:18:03 +03:00
Bananymous 83a6e6f637 LibC: Reorder some syscalls 2023-06-11 03:29:22 +03:00
Bananymous 64890bb640 Kernel: Add SYS_OPENAT 2023-06-11 03:29:22 +03:00
Bananymous 68ec443e07 LibC: implement close 2023-06-11 03:29:22 +03:00
Bananymous aa86125f2b Kernel: Implement SYS_FSTAT 2023-06-11 03:29:22 +03:00
Bananymous c423164066 LibC: Implement basic dirent functionality
We don't currently support seeking
2023-06-11 03:29:22 +03:00
Bananymous eae6119039 Kernel: Add syscall for reading directory entries 2023-06-11 00:18:08 +03:00
Bananymous 30f81e1696 LibC: add missing O_EXEC and O_SEARCH 2023-06-11 00:17:18 +03:00
Bananymous 24993f6020 LibC: implement setenv, unsetenv, putenv 2023-06-05 22:51:02 +03:00
Bananymous 55ea5c5488 Kernel: add basic support for environment variables
exec functions will search files from PATH
2023-06-05 22:51:02 +03:00
Bananymous 896b919c9d Kernel/LibC: pass environ pointer to process 2023-06-05 21:12:08 +03:00
Bananymous a7dc7ecb90 LibC: abort now prints 'abort()' and exits
we used to call assert in abort which then recursively called
abort again.
2023-06-05 18:23:19 +03:00
Bananymous d1ad38c8d4 Kernel/LibC: add SYS_STAT and stat(), lstat() 2023-06-05 14:37:14 +03:00
Bananymous 40055f023c LibC: add wait and waitpid
Note that wait() doesn't work since only waiting for specified
pid is supported. wait() will just return -1 and set errno to
ECHILD.
2023-06-04 18:00:52 +03:00
Bananymous 3a79880e69 LibC: printf string persision works now 2023-06-03 15:07:02 +03:00
Bananymous 88e92eec9e LibC: Add simple definition for realloc
The syscall just crashes the kernel currently. I will implement
this when needed
2023-06-02 17:56:13 +03:00
Bananymous a41b8e416f LibC: add __cxa_at_exit() for libc 2023-06-02 17:50:55 +03:00
Bananymous 8716c8baf4 LibC: remove select() declaration
This already comes from sys/select.h
2023-06-02 17:29:09 +03:00
Bananymous 2d67a7153b LibC: rename [[noreturn]] to __attribute__((__noreturn__))
This compiles with C compiler
2023-06-02 17:28:36 +03:00
Bananymous 3fcc7c6768 LibC: stdlib.h doesn't seem to typedef wchar_t without __need_wchar_t 2023-06-02 17:27:31 +03:00
Bananymous 5d2a062b36 LibC: fix INFINITY definition typo 2023-06-02 17:27:14 +03:00
Bananymous e517ff6b6d LibC: fix DIR typedef for C code 2023-06-02 17:26:38 +03:00
Bananymous 7296846a81 LibC: complex.h undefs I before defining it 2023-06-02 17:13:09 +03:00
Bananymous 6abcb0de9b LibC: mbstate_t is empty struct 2023-06-02 17:10:29 +03:00
Bananymous 40f9d9d9bc LibC: fix sig_atomic_t definition 2023-06-02 17:08:43 +03:00
Bananymous a378e59432 BuildSystem: link libraries when they change
This also fixed the need for manual linkin on firt build
2023-05-31 23:01:40 +03:00
Bananymous 0f412e570c LibC: add execl 2023-05-31 22:36:26 +03:00
Bananymous 24a190d1f7 Kernel: Add SYS_EXEC syscall 2023-05-31 20:57:33 +03:00
Bananymous e8f820ef8d LibC: Fix some headers to make gcc build again 2023-05-30 01:17:45 +03:00
Bananymous fb17af4844 Kernel/LibC: opening standard files is done in libc 2023-05-29 20:21:19 +03:00
Bananymous 9a8512887f LibC: open() now just returns syscall(SYS_OPEN, ...)
errno is handled in syscall()
2023-05-29 20:19:17 +03:00
Bananymous 998999a755 Kernel: Add SYS_SLEEP 2023-05-28 22:34:48 +03:00
Bananymous f2d767b799 Kernel: Add bareboness fork() function 2023-05-28 18:08:49 +03:00
Bananymous dd4973ac35 LibC: fputs uses fputc instead of putc 2023-05-28 17:48:34 +03:00
Bananymous faf14b880e LibC: Rewrite all the headers.
We now have more or less posix issue 2018 conforming libc headers.

This was a really time consuming and boring operation but it had to
be done.

Now we get to actually start implementing libc :)
2023-05-26 22:31:21 +03:00
Bananymous 1658e925f2 Kernel: Add bareboness possibility to set termios 2023-05-26 22:31:21 +03:00
Bananymous 80d9f6131b Kernel/LibC: move file offset back to kernel
This makes keeping track of offsets easier and more proper
2023-05-26 22:31:21 +03:00
Bananymous 8ec675cca6 LibC: fix bugs with printf 2023-05-15 22:47:08 +03:00
Bananymous 7543fadfa8 LibC: printf now prints 0 as integer 2023-05-11 18:20:37 +03:00
Bananymous 729ff267d7 LibC: add function declarations to sys/stat.h 2023-05-11 15:11:33 +03:00