Commit Graph

2663 Commits

Author SHA1 Message Date
Bananymous f8e3ae0525 Kernel: Fix deadlock caused by multithreading
This allows multiple threads to concurrently call the most common
blocking syscalls:
- read
- write
- accept
- connect
- sendto
- recv
- pselect

This prevents a dead lock when for example process is waiting on a pipe,
but unable to write to it since process is locked.

This is the beginning of starting to remove processes own lock from
syscall and locking only necessary parts.
2025-04-22 04:51:53 +03:00
Bananymous c790bad667 Kernel: Make OpenFileDescriptorSet thread safe
Also this allows concurrent calling of read/write/send/recv
2025-04-22 04:31:18 +03:00
Bananymous d54489bbcb Kernel: Implement MemoryRegion pinning
This allows process to pin a MemoryRegion into users memory space for
syscall duration without allowing user to munmap the region.
2025-04-22 04:30:07 +03:00
Bananymous 808c97020a Kernel/LibC: Implement SA_RESTART
I have been thinking how to do this for a long time but I finally
figured out a semi-clean way
2025-04-22 02:42:44 +03:00
Bananymous 34e680d792 ports/ncurses: Set some needed environment variables
ncurses depends on these being set to function properly
2025-04-22 01:56:34 +03:00
Bananymous 32d543943b ports: Add lynx port
I have had this for a while but apparently never commited :D
2025-04-22 01:44:49 +03:00
Bananymous 2632507980 ports/ca-certificates: Add symlink to /etc/ssl/cert.pem
Some ports try to use this file
2025-04-22 01:44:02 +03:00
Bananymous f467a9a309 resolver: Resolve hostname to loopback address
We don't currently support loopback adapters, but some ports were trying
to resolve it.
2025-04-22 00:48:26 +03:00
Bananymous 5c9710c78b LibC: Implement `strcoll_l` 2025-04-22 00:48:26 +03:00
Bananymous 107b31a0b5 Kernel: Fix E1000{,E} driver for older qemu versions
This patch adds clearing of *Interrupt Cause Registers*, which allows
older qemu versions to send new interrupts. Apparently this is not
needed on newer releases.
2025-04-22 00:31:13 +03:00
Bananymous 028c7a822f LibC: Don't define SCHAR_MAX in locale.c 2025-04-21 22:21:40 +03:00
Bananymous 18f5f98e62 General: Mark USB hubs done in README 2025-04-21 22:13:31 +03:00
Bananymous 543bb3cc4b LibC: Rework malloc locking add proper realloc 2025-04-21 20:29:28 +03:00
Bananymous 1c44d24b76 Kernel: Fix TCP closing state machine 2025-04-21 20:02:32 +03:00
Bananymous 5305f962c0 ports/openssl: Make openssl port threaded 2025-04-21 19:59:57 +03:00
Bananymous b774f147da LibC: Implement dummy pthread_attr_{get,set}detachstate
detached threads are not yet supported, but this allows implementation
to make sure threads are joinable.
2025-04-21 19:58:01 +03:00
Bananymous 2a5921b9c9 LibC: Implement pthread_barrier
This is not fully working but should be fine for most cases
2025-04-21 19:53:38 +03:00
Bananymous 60cb392e97 LibC: Implement pthread_barrier
This is yet another bad sched_yield implementation :D
2025-04-21 19:52:14 +03:00
Bananymous d012c538c3 LibC: Add PTHREAD_SPIN_INITIALIZER
This is not posix, but current implementation allows adding this
2025-04-21 19:47:00 +03:00
Bananymous 1c88d0d7f7 LibC: Implement pthread_rwlock
This uses the same dumb sched_yield instead of actually blocking :D
2025-04-21 18:48:47 +03:00
Bananymous 773b8de8ba LibC: Refactor pthread type definitions 2025-04-21 14:38:40 +03:00
Bananymous 5d8dd090a9 LibC: Implement `pthread_once` 2025-04-21 14:17:17 +03:00
Bananymous 2cbfe70a28 DynamicLoader: Don't leak fds 2025-04-20 18:18:32 +03:00
Bananymous 16dbfbb267 LibC: Make limits.h `*_MAX` usable in #if comparisons 2025-04-20 17:15:20 +03:00
Bananymous 99fc7817c6 Kernel: Cleanup stack alignment assembly 2025-04-20 16:55:18 +03:00
Bananymous 265b4c2b22 LibC: Implement `thread_equal` 2025-04-20 03:27:16 +03:00
Bananymous db9db2cc40 LibC: Implement basic pthread mutexes
This implementation is just calling sched_yield if it could not get
mutex. This is not optimal as it does not allow the CPU to idle, but it
works for now :)

Also I did not test this code at all, but it feels correct :D
2025-04-20 03:27:16 +03:00
Bananymous 3642eabac0 LibC: Use BAN::atomic_* functions in pthread spinlock
This allows us not to reinterpret_cast pthread_spin_t to
BAN::Atomic<pthread_spin_t> which is much better :)
2025-04-20 03:11:41 +03:00
Bananymous 98e05fd179 BAN: Implement atomic functions for normal integers 2025-04-20 03:11:41 +03:00
Bananymous 1ccff9478f LibC: Don't define __tls_get_addr if TLS is disabled
This makes linking fail if something tries to use TLS :)
2025-04-20 03:11:41 +03:00
Bananymous 85f9b585f5 LibC: Don't yield on `pthread_spin_lock`
Thats kinda the whole point of spinlocks :D
2025-04-20 03:11:41 +03:00
Bananymous 01626b4c9f LibC: Add stub for `pthread_detach` 2025-04-20 03:11:41 +03:00
Bananymous a85841ca76 LibC: Add stub for `pthread_attr_setstacksize` 2025-04-20 03:11:41 +03:00
Bananymous fe6c4cd0b5 LibC: Implement POSIX TLD area (pthread_key*) 2025-04-20 03:11:41 +03:00
Bananymous f1585d09e1 LibC: Add more integer size definintions to limits.h 2025-04-19 21:50:26 +03:00
Bananymous 252784ff5b Kernel: Preserve kernel command line on fork 2025-04-19 21:29:52 +03:00
Bananymous 6f9dc2a9b8 Kernel/LibC: Implement `fchdir`, cleanup `chdir` and `getcwd` 2025-04-19 21:28:31 +03:00
Bananymous 7edfae8583 Shell: Cleanup `export` builtin 2025-04-19 21:23:26 +03:00
Bananymous 28275d86ea LibC/Shell: set PWD env in Shell, not libc
I have no idea why I was doing it in the libc
2025-04-19 21:16:11 +03:00
Bananymous 2d19b5074e LibC: Implement some missing wchar functions 2025-04-19 20:56:41 +03:00
Bananymous e62cc17797 LibC: Use `nl_langinfo` for strings in `strftime` 2025-04-19 20:03:56 +03:00
Bananymous 407eed212a LibC: Implement nl_langinfo
All values are from POSIX locale except CODESET which can be "UTF-8"
depending on the current locale
2025-04-19 20:02:01 +03:00
Bananymous 12d47858c1 LibC: Fix overflow error in `fread` and `fwrite` 2025-04-19 18:42:12 +03:00
Bananymous 3d34e6e6d9 ports: ncurses add support for shared libraries 2025-04-19 05:55:16 +03:00
Bananymous dc188e601a LibC: Add definition for LOG_UPTO 2025-04-19 02:48:21 +03:00
Bananymous 8a2df23260 LibC: Define RLIM_NLIMITS 2025-04-19 02:34:56 +03:00
Bananymous 46079a8612 LibC: Implement no-op posix_madvice
Also add non-posix prefixed definitions
2025-04-19 02:07:45 +03:00
Bananymous 201d752850 Kernel: Allow pipe to write partial data
This allows potential blocking
2025-04-19 00:39:42 +03:00
Bananymous 63b3d9875d Kernel: Fix `Thread::block_with_eintr*` functions
I was using wrong block function, `block_with_timeout` instead of
`block_with_wake_time`. This caused functions to block way too long and
caused a lot of hangs.
2025-04-19 00:39:42 +03:00
Bananymous 8cd2d772b0 Shell: Print error if `execv` fails 2025-04-19 00:39:42 +03:00