Commit Graph

279 Commits

Author SHA1 Message Date
Bananymous f804e87f7d Kernel: Implement basic gateway for network interfaces 2024-02-05 18:18:56 +02:00
Bananymous c35ed6570b LibC: Implement endiannes and ip address functions 2024-02-05 18:18:56 +02:00
Bananymous 692cec8458 Kernel/Userspace/LibC: Implement basic dprintln for userspace 2024-02-05 01:24:09 +02:00
Bananymous e1ffbb710b Kernel/LibC: Implement basic ioctl for network addresses 2024-02-03 01:50:10 +02:00
Bananymous bc1441a5eb LibC: add stropts.h 2024-02-02 14:29:20 +02:00
Bananymous 0f154c3173 Kernel: Implement basic recvfrom 2024-02-02 13:50:00 +02:00
Bananymous ec2f21bb9f Kernel/LibC: Implement SYS_SENDTO 2024-02-02 03:16:01 +02:00
Bananymous ab150b458a Kernel/LibC: Implement basic socket binding 2024-02-02 01:31:58 +02:00
Bananymous cf28ecd5a6 Kernel/LibC: Add SYS_SOCKET 2024-02-01 23:39:09 +02:00
Bananymous dfe5a2d665 All: Cleanup all files
Add newline to end of files and remove whitespace from end of lines
2024-01-24 15:53:38 +02:00
Bananymous e544e6a62d LibC: Implement floating point parsing to *scanf functions 2024-01-24 11:54:12 +02:00
Bananymous 606a7cb313 LibC: Implement almost POSIX compliant *scanf functions
Only wchar strings and floating point values are not parsed
2024-01-24 10:33:12 +02:00
Bananymous 2c471a89d0 LibC: Add compile option to libc to stop optimizing string.h 2024-01-17 19:44:29 +01:00
Bananymous 51214ea1bf Kernel: Add load_keymap syscall and load Finnish keymap in init 2024-01-10 14:46:29 +02:00
Bananymous db0650cf10 LibC: Implement basic atexit. This allows clean exit from doom (soon) 2024-01-03 00:30:37 +02:00
Bananymous 668c4c8976 LibC: Implement getgrnam and getgrgid 2024-01-03 00:14:49 +02:00
Bananymous 96d831c31a Kernel/LibC/Userspace: Implement chown and set tty owner on login 2024-01-02 22:19:38 +02:00
Bananymous 4307968182 All: Start work again on sse support 2023-12-28 19:14:42 +02:00
Bananymous 3352640d09 LibC: strlen had to be marked not optimized... 2023-12-19 21:42:59 +02:00
Bananymous 637397dd2f LibC: Make memcpy and memset not optimized
GCC does some weird optimizations and breaks these functions
2023-12-19 21:42:59 +02:00
Bananymous 5edbb1d5c4 LibC: make execvp fail if no executable found 2023-12-19 21:42:59 +02:00
Bananymous 1cd5b3c20c LibC: Fix stpncpy
I had misunderstood and tought that the string is always
null terminated
2023-12-15 00:33:37 +02:00
Bananymous c773e2ed07 LibC: Optimize malloc even further
aoc2023/day12 now runs in 3.5 seconds on my machine. This is way
better than the old almost hour.
2023-12-14 23:49:25 +02:00
Bananymous c4186bd5f0 LibC: Compile with -O2 optimizations
I have no idea why libc had no optimizations enabled.

Weird thing is that memcpy optimized to infinite loop if I kept the
__restrict__ attributes in pointers. I don't think there was any ub.
2023-12-14 23:40:08 +02:00
Bananymous 5f640da166 LibC: Optimize malloc by a lot
I now cache first free node in malloc_pool and whether the node is
last or not. There allow doing less full iterations over the whole
malloc pool.

Malloc is still unbearably slow and I will have to write a proper
fast malloc at some point. With this patch running aoc2023/day12 is
atleast possible. Probabaly will take closer to an hour...
2023-12-14 15:31:00 +02:00
Bananymous 7320104fd0 LibC: Mark __assert_fail as noreturn 2023-12-14 15:13:54 +02:00
Bananymous 600bd7ee0f LibC: Implement rmdir in unistd.h 2023-12-14 11:02:56 +02:00
Bananymous adf1e54605 LibC: Implement more functions to string.h 2023-12-14 11:02:30 +02:00
Bananymous a3de64f5fa LibC: Implement basic version of system() this assumes Shell exists 2023-12-14 11:00:40 +02:00
Bananymous 8216d09e06 LibC: Implement non-locale specific functions from strings.h 2023-12-14 10:59:39 +02:00
Bananymous 694cda6e40 LibC: Implement remove for stdio 2023-12-14 10:58:50 +02:00
Bananymous 00d57d783e LibC+userspace: Make everything compile with -Wall -Wextra -Werror
I added -Wall -Wextra -Werror as public compile flags to libc. Now
everything in userspace in compiled using these flags. I made all
necessary changes to allow compilation to work.

Only exception is execvp which has a large stack usage. Maybe it
should use malloc for the buffer but posix allows ENOMEM only when
kernel is out of memory... This can be fixed when fexecve is
implemented and there is no need for absolute path.
2023-12-10 19:20:14 +02:00
Bananymous 9d8c9baa3f LibC: Remove unnecessary RWX mask definition 2023-12-09 19:43:49 +02:00
Bananymous 0dc168a8c0 LibC: Implement basic execvp 2023-12-06 18:14:00 +02:00
Bananymous 76049b2e13 LibC: Implement and fix some string.h functions 2023-12-06 18:13:34 +02:00
Bananymous 976ae64f88 LibC: make sleep() set errno if sleep woke up early 2023-12-06 13:13:43 +02:00
Bananymous 1c78671078 Kernel: Rework all signal code
Signal handling code was way too complex. Now everything is
simplified and there is no need for ThreadBlockers.

Only complication that this patch includes is that blocking syscalls
have to manually be made interruptable by signal. There might be some
clever solution to combat this is make this happen automatically.
2023-12-06 13:02:17 +02:00
Bananymous cdcc36efde Kernel: Remove unnecessary raise syscall 2023-12-06 13:00:45 +02:00
Bananymous 894065a67e LibC: cleanup and fix fgets
My quick fix for fgets wrote non-nullterminated newline if size was
one.

POSIX doesn't specify what happens if size == 0, so I do the same as
glibc and return NULL without setting errno.
2023-12-05 10:00:43 +02:00
Bananymous 95fc894303 LibC: fix fgets when reading empty line 2023-12-05 07:46:14 +02:00
Bananymous 327b330338 Kernel: Make internal framebuffer bpp constexpr defined in libc 2023-11-29 20:07:33 +02:00
Bananymous d86ecf4f61 Kernel: Reading from negative offset in fb dev gives out info 2023-11-28 23:50:11 +02:00
Bananymous 09b7cb2f33 Kernel/LibC: Implement pread() 2023-11-28 23:47:30 +02:00
Bananymous 60e755210c Kernel/LibC: Implement very basic msync 2023-11-22 22:44:06 +02:00
Bananymous c084ce8b01 Kernel/LibC: Implement readlink and readlinkat 2023-11-11 23:16:52 +02:00
Bananymous f6c312a6b3 BuildSystem: using sysroot doesn't need root privileges anymore!
Sysroot is now created with fakeroot. This allows root access to be
only needed for disk image creation, since it uses loopback devices.
2023-11-04 17:50:43 +02:00
Bananymous 7c6832cee4 LibC: implement and call __cxa_finalize() on exit()
This allows global destructors to be actually called
2023-10-30 11:10:08 +02:00
Bananymous 0b5fcb3f88 Kernel/LibC: Add crt* files to LibC and remove crt0 from kernel
There was no reason for libc get crt0 from kernel.
2023-10-30 11:06:13 +02:00
Bananymous 87ff38664a Kernel/LibC: Add syscall and wrapper for unlink 2023-10-25 21:45:04 +03:00
Bananymous 6ee4d10651 Kernel/LibC/Userspace: Implement mkdir and creat
Touch now uses creat insteadd of open with O_CREAT flag
2023-10-25 21:07:26 +03:00
Bananymous 627b8cc140 Kernel/LibC: implement chmod syscall + libc wrapper 2023-10-25 02:35:37 +03:00
Bananymous 5ee3506474 Kernel: Add physical memory info to /proc/{pid}/meminfo 2023-09-30 22:11:45 +03:00
Bananymous 785de5f9b9 Kernel: /proc/{pid}/meminfo now reports per process memory usage 2023-09-30 21:20:18 +03:00
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