Commit Graph
100 Commits
Author SHA1 Message Date
Bananymous de45b760b5 LibC: Implement alphasort and scandir 2025-07-31 22:47:40 +03:00
Bananymous ff29e9c4d6 LibC: Implement {,f}pathconf
This just return minimum values specified by posix
2025-07-31 22:47:40 +03:00
Bananymous cc04bd0f06 LibC/Kernel: Implement ttyname_r 2025-07-31 22:47:40 +03:00
Bananymous e72e1e4e43 LibC: Add _SC_NPROCESSORS_{CONF,ONLN) 2025-07-31 22:47:40 +03:00
Bananymous 987cc3c237 3000th COMMIT: ports: Add halflife port 2025-07-31 22:47:34 +03:00
Bananymous 935f69e011 ports: Add freetype port 2025-07-31 22:47:29 +03:00
Bananymous 9f0c2fb6e2 ports: Apply only patches ending in .patch 2025-07-31 22:47:29 +03:00
Bananymous 9b18bda9c8 Kernel: Make epoll always check for HUP and ERR 2025-07-31 22:47:29 +03:00
Bananymous 7831c74e8c DynamicLoader: Add support for LD_LIBRARY_PATH
Also fix a bug with dlopen with TLS
2025-07-31 22:47:29 +03:00
Bananymous c1978f9133 Shell: Implement redirections
This works well enough. At the moment redirections can appear anywhere
in the command **after** environment variables and possible alias
command. This means commands like `>foo echo hello` are not supported.
I don't think this is big enough problem for now (99% time redirections
are given after arguments) that i would rewrite the environment and
alias parsing.
2025-07-22 16:54:06 +03:00
Bananymous 05affda20c ports: Add python3 port 2025-07-22 14:11:09 +03:00
Bananymous e2eb555ca0 LibC: Add dummy libintl support
This doesn't really do anything but allows some ports to use it :D
2025-07-22 13:26:53 +03:00
Bananymous 418c3c9cfa ports: Remove unneeded libtool files after install 2025-07-22 10:32:52 +03:00
Bananymous bc66e181a5 ports: Update to new config.sub syntax
There is no longer need to manually patch config.sub files!
2025-07-22 10:31:56 +03:00
Bananymous 6971f76bd3 ports: Add support for downloading upstream config.sub
banan-os is now in the upstream config.sub. This means no more
config.sub patches!
2025-07-22 10:13:41 +03:00
Bananymous 1e65f02ff7 Terminal: Handle bell and warn on unimplemented control characters 2025-07-21 14:28:09 +03:00
Bananymous 4efaf65d3f BuildSystem: Use usb-tablet instead of usb-mouse
This allows sharing mouse between host and guest!
2025-07-19 18:02:07 +03:00
Bananymous aa0249fadb WindowServer: Support absolute position mouse 2025-07-19 18:01:23 +03:00
Bananymous 2c65590134 Kernel: Add support for absolute position mouse 2025-07-19 18:00:39 +03:00
Bananymous a0d1a9ad67 Kernel: Fix PIT::prescheduler_sleep_ns
I don't even know what I was doing here :D
2025-07-19 01:25:46 +03:00
Bananymous 5df6270e32 Kernel: Clobber flags in rdrand 2025-07-18 19:36:37 +03:00
Bananymous 7af6e1cd34 Kernel: Ignore HID main item tag 0
This for some reason exists in vmware's usb devices
2025-07-18 19:11:12 +03:00
Bananymous cceb066284 Kernel: Don't use IST on 32 bit target
This only exists in 64 bit
2025-07-18 19:10:48 +03:00
Bananymous 7a054787ca Kernel: Don't print error if root is empty
This is used when loading filesystem from initrd
2025-07-18 19:09:43 +03:00
Bananymous d27891c79f Kernel: Fix correct IOAPIC lookup based on gsi 2025-07-18 19:09:20 +03:00
Bananymous 5874fd640e Kernel: Fix TmpFS for 32 bit target
There was a problem when sizeof(size_t) != sizeof(PageInfo)
2025-07-18 19:07:32 +03:00
Bananymous 11ae220dbe LibImage: Optimize image resizing algorithms 2025-07-18 18:20:37 +03:00
Bananymous 22542a3a71 BuildSystem: Enable sse and sse2 for all programs and libraries
This is default on x86_64 but not on the 32 bit target. banan-os
already requires the CPU to support SSE even on 32 bit platforms.
2025-07-18 18:20:37 +03:00
Bananymous e16fb6a8e9 Kernel: Don't validate allowed null pointers on syscalls 2025-07-17 22:14:04 +03:00
Bananymous d941e6d70b General: Update README features and environment variables 2025-07-17 21:45:48 +03:00
Bananymous b65068dc7d BuildSystem: Add support for building initrd image
This is nice for testing when there isn't xhci controller available or
my usb stack fails :)
2025-07-17 21:45:48 +03:00
Bananymous d5301508ec Kernel: Increase kernel thread stack size
HACK HACK HACK

This is just to make banan-os boot on one razer laptop where AML
triggers a stack overflow :)
2025-07-17 21:21:14 +03:00
Bananymous 793cca423b Kernel: Fix system timer disabling
I was actually not disabling system timer (HPET, PIT) when using lapic
timers for scheduling. This made BSB get too many timer interrupts :D
2025-07-16 20:02:04 +03:00
Bananymous 3960687f9d Kernel: Parse PCIConfig opregion address on read/write
I was testing on some hardware and _ADR does not have to exist in the
namespace when opregion is parsed :)
2025-07-16 15:34:36 +03:00
Bananymous 3ec7aad432 Kernel: Increase PS/2 timeout and detect more keyboards
I was testing on a old T61
2025-07-16 15:29:27 +03:00
Bananymous 84f1ad4f26 ports: Fix doom compilation with the new toolchain 2025-07-15 16:12:03 +03:00
Bananymous 6b9dbf625d userspace: Add audio utility to play audio files 2025-07-15 16:12:03 +03:00
Bananymous 3aea2c007d Userspace: Add simple AudioServer and LibAudio 2025-07-15 16:12:03 +03:00
Bananymous 85d195212a BuildSystem: Update qemu script and add ac97 2025-07-15 14:17:49 +03:00
Bananymous 8a663cb94f Kernel: Implement basic AC97 driver 2025-07-15 14:17:49 +03:00
Bananymous 674e194a91 Kernel: Don't fail PCI interrupt allocation with PCIe and no PCI 2025-07-15 14:17:49 +03:00
Bananymous c57f0abb56 BuildSystem: Order source list alphabetically 2025-07-15 14:17:49 +03:00
Bananymous 163fdcd582 LibC: Fix exec family function path resolution 2025-07-15 14:17:49 +03:00
Bananymous 3be17c6117 BAN: Add clear and access by index to CircularQueue 2025-07-10 17:24:40 +03:00
Bananymous 995dfa1455 Kernel: Fix AML PCIConfig OpRegion accesses
Apparently I'm not supposted to calculate device/function from the
offset, but parse them from the acpi namespace :)

This allows PCI PIN interrupt routing actually work
2025-07-04 13:21:02 +03:00
Bananymous 544c8dbc13 Kernel: Optimize AML interpreter stack usage
There is a very hacky no-inline hack that I am not proud of but it drops
the stack usage of few functions A LOT.

Previously Virtual Box could not boot with our 8 page stack, but these
changes allow it to boot on 5!
2025-07-03 00:49:23 +03:00
Bananymous 8da4f80453 Kernel: Add custom stack to double fault handler
This prevents triple faults!
2025-07-02 23:14:52 +03:00
Bananymous 6084aae603 Kernel: Add guard pages to kernel and userspace stacks 2025-07-02 23:12:36 +03:00
Bananymous e1319a06f2 Kernel: Remove accidentally commited debug prints 2025-07-02 23:09:57 +03:00
Bananymous 51fd7a607d Kernel: Fix IDE controller waiting
We did not correctly wait until controller is ready to receive data on
write command. Also remove possible kernel panic if controller sends
unexpected interrupts
2025-07-02 22:04:41 +03:00
Bananymous 8aff315c7b LibC: fflush file in setvbuf before updating the buffer 2025-07-02 01:54:03 +03:00
Bananymous 8e0d79f301 ports: Fix make compilation with new toolchain 2025-07-02 01:54:03 +03:00
Bananymous 8a0269d29e Kernel: Remove kernel processes
Kernel can just use raw threads, pretty muchs the only thing that
process provides is syscalls which kernel threads of course don't
need.

Also this makes init process have pid 1 :D
2025-07-02 01:54:03 +03:00
Bananymous 892e16dfb1 Kernel: Increase PS2 timeout to 300 ms, load PS2 in separate thread
PS/2 seems to hit command timeout sometimes on slow emulation so
increase the timeouts.

Also move PS/2 device initialization to a different thread because
device indentification waits for timeouts.
2025-07-02 00:17:42 +03:00
Bananymous 92e4078287 Kernel: Rewrite ThreadBlocker
This gets rid of a very old bug where kernel panics when thread is being
woken up and unblocked at the same time on different cores. This
required adding a new lock to SchedulerQueue::Node and adding a cap to
how many threads a threadblocker can simultaneously block. I don't think
I ever block more than five threads on the same ThreadBlocker so this
should be fine.
2025-07-02 00:17:42 +03:00
Bananymous 41e1819072 Kernel: Align argv and envp to pointer boundary
This bug was found with ubsan
2025-07-02 00:17:42 +03:00
Bananymous fb7e9719a1 Kernel: Add fast fill method to framebuffer device
This makes `clear` much faster when running without kvm!
2025-07-02 00:17:42 +03:00
Bananymous c2d09b64ca Kernel: Drop 24 bpp support from double buffer
I don't even know why this was supported, I am not planning on making
the fb anything other than 32 bpp
2025-07-02 00:17:42 +03:00
Bananymous 1b2aa6c2da Kernel: Fix unaligned access in AML
Found with ubsan
2025-07-02 00:17:42 +03:00
Bananymous a5b4cee298 Kernel: Load USTAR from a boot module if loading root partition fails
This allows banan-os to boot on hardware where we don't have working
storage driver or the storage driver fails (pretty common with my usb
mass storage drivers...)
2025-07-02 00:17:42 +03:00
Bananymous 17f1ac10e3 Kernel: Don't ignore modules passed with multiboot2 2025-07-02 00:17:42 +03:00
Bananymous c67198032f Kernel: Rewrite TmpFS block and inode allocation
This makes creating files and appending to then A LOT faster. Some code
I tested took 40 seconds in the previous implementation and less than a
second on the new one!

This code is really sketcy, I hope I'll never have to touch it again :)
2025-07-02 00:17:42 +03:00
Bananymous 107b092982 Kernel: Allow arbitrary sized tmpfs files
The 2 block limit started to get annoying :D
2025-07-02 00:17:42 +03:00
Bananymous bac06e45a4 Kernel: Fix TmpSymlinkInode target getting/setting 2025-07-02 00:17:42 +03:00
Bananymous 0e8a68831c Kernel: Fix TmpInode chmod not preserving file type 2025-07-02 00:17:42 +03:00
Bananymous 5912abd541 Kernel: Add error reporting for readonly mounted filesystems 2025-07-02 00:17:42 +03:00
Bananymous 13d33995cb Kernel: Make sure PageTable::fast_page gets passed page aligned addr 2025-06-30 01:48:47 +03:00
Bananymous c8c05f62b4 Kernel: Remove unused FileSystem::dev 2025-06-29 00:29:03 +03:00
Bananymous 944b045885 Toolchain: Set CMAKE_STAGING_PREFIX in toolchain file 2025-06-28 23:34:11 +03:00
Bananymous 19897ffa26 userspace: Compile test utility :D 2025-06-28 22:40:00 +03:00
Bananymous 42a10b21c7 userspace: Implement true and false utilities 2025-06-28 22:39:19 +03:00
Bananymous 5df0e25c1f userspace: Implement chown utility 2025-06-28 21:32:59 +03:00
Bananymous ebf2b16d09 Kernel: Implement chown to ext2 and tmpfs 2025-06-28 21:28:54 +03:00
Bananymous f2eaab6e43 ports: Add tuxracer port
THIS IS SUPER SLOW
2025-06-28 20:54:45 +03:00
Bananymous a847823411 ports: Add tcl port 2025-06-28 20:54:45 +03:00
Bananymous fe9a8b542a ports: Add bochs port
THIS IS SUPER SLOW
2025-06-28 20:54:45 +03:00
Bananymous cd101b6844 ports: Add sdl12-compat port 2025-06-28 20:54:45 +03:00
Bananymous 69229102c4 ports: Add SDL2 port 2025-06-28 20:52:33 +03:00
Bananymous 4bc3630d19 ports: Add glu port 2025-06-28 20:52:20 +03:00
Bananymous ab00686ac9 ports: Add mesa port 2025-06-28 20:51:29 +03:00
Bananymous c3004a038f ports: Add bash port 2025-06-28 20:48:13 +03:00
Bananymous 9cf9d8847b ports: Add lua port 2025-06-28 20:48:13 +03:00
Bananymous 0a3c10566b ports: vim update to 9.1 2025-06-28 20:48:13 +03:00
Bananymous c94243e107 ports: Update some ports to new syntax 2025-06-28 20:48:13 +03:00
Bananymous 505388b9fa ports: Add pre_install and post_install to install.sh 2025-06-28 20:25:35 +03:00
Bananymous 7314cf708c Kernel: Only restart certain syscalls with SA_RESTART
SA_RESTART is not supposted to restart every function.
2025-06-28 20:25:35 +03:00
Bananymous 3e6a4f2b16 LibC: Add getgroups stub 2025-06-28 20:25:35 +03:00
Bananymous c7c3dd7662 init/ports: Fix environment variables in init/ncurses
init no longer sets NCURSES_NO_UTF8_ACS
ncurses no longer sets TERM
2025-06-28 20:25:35 +03:00
Bananymous e4f025edd6 LibC: Implement deprecated bcmp, bcopy, bzero 2025-06-28 20:25:35 +03:00
Bananymous 96f3efbf86 LibC: Fix enviroment variable allocation 2025-06-28 20:25:35 +03:00
Bananymous 2b2130ff42 toolchain/ports: Use strip install targets
I just found that these exist. This is much cleaner than manually
stripping the executables!
2025-06-28 20:25:35 +03:00
Bananymous 463ce05da0 ports: Allow specifying custom make targets 2025-06-28 20:25:35 +03:00
Bananymous fa4095ba95 ports: Add pre_configure to build system
We have post_configure, so why not this :)
2025-06-28 20:25:35 +03:00
Bananymous db571b4859 Kernel: Allow relockign mutex even when holding a spinlock
Only reason mutex locking is now allowed with spinlocks is to prevent
yield.

Also try_lock can be now safely used while holding a spinlock
2025-06-28 19:40:54 +03:00
Bananymous e8491b34b8 Kernel/LibC: Rework TIOC{G,S}WINSZ more linux like
Userspace can freely set terminal size, kernel just updates it when for
example new font is loaded. Also SIGWINCH is now sent by kernel instead
of userspace.
2025-06-28 19:40:54 +03:00
Bananymous 521457eb92 DynamicLoader: Add support for calling destructors
After all libraries are initialized, their destructors are registered
using atexit
2025-06-28 16:55:13 +03:00
Bananymous f26a445ce6 LibC: Make malloc actually allign to s_malloc_default_align boundary 2025-06-28 16:55:13 +03:00
Bananymous f73bb242f3 Kernel: Save fpu state and flags in signal handler
This was causing some weird crashes :D
2025-06-28 16:55:13 +03:00
Bananymous 9e895e5286 Kernel: Use fxsave64 and fxrstor64 on 64 bit target 2025-06-28 16:55:13 +03:00
Bananymous 5b0e5512a8 Kernel: Don't block in send until full message is sent
Only block until some data was sent. This allows select + send to be
actually non blocking if used correctly.

Also fixes a bug with non blocking sockets that could not send the full
message is one try.
2025-06-28 16:55:13 +03:00