Bananymous
ad12bf3e1d
LibC: Cleanup environment variable code
2026-04-13 00:36:13 +03:00
Bananymous
42964ad0b4
Kernel: Remove concept of OpenFile
...
This was just RefPtr<OpenFileDescription> and descriptor flags.
Descriptor flags only define O_CLOEXEC, so we can just store fd's
cloexec status in a bitmap rather than separate fields. This cuts down
the size of OpenFileDescriptorSet to basically half!
2026-04-12 04:42:08 +03:00
Bananymous
87979b1627
LibImage: Don't allocate zlib stream to a contiguous buffer
...
We can now pass multiple buffers to the decoder!
2026-04-11 19:48:46 +03:00
Bananymous
fed9dbefdf
LibDEFLATE: Allow decompression from multiple byte spans
...
Before we required the compressed data to live in a single contiguous
chunch of memory.
2026-04-11 19:47:44 +03:00
Bananymous
2984927be5
WindowServer: Block without timeout when there is no damaged regions
2026-04-11 08:41:21 +03:00
Bananymous
2e654b53fa
WindowServer: Use rectangular framebuffer syncs
2026-04-11 08:30:15 +03:00
Bananymous
ac6e6f3ec1
Kernel: Add ioctl to sync rectangular areas in framebuffer
...
msync is not really the best API for framebuffer synchronization
2026-04-11 08:29:10 +03:00
Bananymous
2b97587e9f
WindowServer: Rewrite damaged region tracking
...
Instead of immediately doing rerender of client data and syncing 60 Hz,
we now only keep track of the damaged regions and also do the rerender
step 60 Hz.
2026-04-11 08:26:22 +03:00
Bananymous
4bde088b28
WindowServer: Store rectangles as min and max bounds
...
This makes some math easier than x,y and w,h
2026-04-11 06:35:45 +03:00
Bananymous
2a9dad2dd8
LibC: Add SSE2 non-temporal memset and memcpy
...
Also cleanup other assembly by using local labels to emit them from the
assembled program.
2026-04-11 03:30:52 +03:00
Bananymous
d11160d2f7
Kernel: Fix si_addr reporting
...
Meaning of this is signal specific and not the instruction pointer
2026-04-11 03:30:52 +03:00
Bananymous
7333008f40
LibC: Use IP instead of si_addr for faulting instruction
...
si_addr only means faulting instruction for SIGILL. For SIGSEGV it is
the faulting memory address.
2026-04-11 03:30:52 +03:00
Bananymous
cd7d309fd1
Kernel: Push missing IP and SP to mcontext in signal handler
...
I was missing these two registers, messing up the whole siginfo_t
structure. This fixes libc's stack trace dump crashing :D
2026-04-11 03:30:52 +03:00
Bananymous
a4ba1da65a
LibGUI/WindowServer: Rework packet serialization
...
Instead of sending while serializing (what even was that), we serialize
the whole packet into a buffer which can be sent in one go. First of all
this reduces the number of sends by a lot. This also fixes WindowServer
ending up sending partial packets when client is not responsive.
Previously we would just try sending once, if any send failed the send
was aborted while partial packet was already transmitted. This lead to
packet stream being out of sync leading to the client killing itself.
Now we allow 64 KiB outgoing buffer per client. If this buffer ever fills
up, we will not send partial packets.
2026-04-11 03:30:52 +03:00
Bananymous
2f9b8b6fc9
Kernel/LibC: Rework userspace syscall interface
...
Kernel syscall API no longer zeros all unused argument registers and
libc now uses inlined syscall macro internally. This significantly
cleans up generated code for basic syscall wrapper functions.
2026-04-11 03:30:52 +03:00
Bananymous
279ac6b2b6
BAN: Implement some macro utilities
...
This contains stuff to count arguments, stringify, concatinate, for_each
2026-04-11 03:30:52 +03:00
Bananymous
9084d9305c
Kernel: Change preemption condition
...
Instead of keeping track of the current time and rescheduling when
interval has passed, keep track of the next expected reschedule time.
This prevents theoretically missing every second pre-emption when
scheduler's timer is interrupting at same rate as the interval.
2026-04-11 03:30:52 +03:00
Bananymous
80c4213501
LibC: Make errno macro directly access uthread
...
This allows inlining errno usages
This breaks libc ABI and requires toolchain rebuild
2026-04-11 03:30:32 +03:00
Bananymous
e0af23a924
LibC: Move uthread definition to its own header
...
Use `__asm__` instead of `asm` to allow compilation with --std=c99 and
before
2026-04-11 03:30:32 +03:00
Bananymous
7e907b70f6
Kernel: Store memory region size as uint64_t
...
On 32 bit target, we were storing 32 bit physical region sizes which
would truncate regions > 4 GiB
2026-04-07 03:41:25 +03:00
Bananymous
7fb27b16e8
LibC: Fix pthread cancellation
...
Install SIGCANCEL handler for all threads.
Remove unneeded atomic stores and loads. States are only changed within
the thread itself.
Define pthread_testcancel as a macro so it gets inlined inside
cancellation points
2026-04-07 03:41:25 +03:00
Bananymous
3fb903d991
LibGUI: Optimize invalidate and set alpha channel
...
If the window does not have an alpha channel, we now set every pixel's
alpha to 0xFF. This is needed by the WindowServer when it does alpha
blending, there used to be some weird stuff happening on overlapping
windows.
Also when we are invalidating a region with width of the whole window,
we can do a single memcpy instead of a memcpy for each row separately.
2026-04-06 19:29:34 +03:00
Bananymous
2a4a688c2d
WindowServer: Optimize rendering
...
We now use SSE2 to do alpha blending on 4 pixels at a time where
possible and use memcpy instead of manual loops for non blended regions.
2026-04-06 19:29:34 +03:00
Bananymous
1487c86262
Kernel: Resolve \\_S5 package elements on poweroff
2026-04-06 19:29:34 +03:00
Bananymous
4d3751028b
LibInput: Honor chroot and credentials when loading keymap
2026-04-06 19:29:34 +03:00
Bananymous
e4c6539964
Kernel: Be more clever with physical memory
...
Initially allocate all physical memory except kernel memory and boot
modules. Before we just skipped all memory before kernel boot modules.
Also release memory used by boot modules after the kernel is up and
running. Once the boot modules are loaded, there is no need to keep them
in memory.
2026-04-06 19:29:34 +03:00
Bananymous
34b59f062b
LibC: Implement blocking pthread_rwlock
...
pthread_rwlock now uses a mutex and condition variable internally so it
doesn't need to yield while waiting!
2026-04-06 19:29:34 +03:00
Bananymous
ec4aa8d0b6
LibC: Fix shared pthread_barrier init
...
Initialize internal lock and cond as shared when the barrier is shared
2026-04-05 12:06:18 +03:00
Bananymous
1eebe85071
LibC: Fix pthread_cond_timedwait
...
If timeout occurred, I was not removing the entry from block list
2026-04-05 11:31:16 +03:00
Bananymous
db0507e670
LibC: Mark pthread_exit noreturn
2026-04-05 11:30:45 +03:00
Bananymous
1e3ca7dc18
Kernel: Fix signal related syscalls
...
There were missing locks, out of order sigprocmask, incorrect signal
masking...
2026-04-05 02:31:30 +03:00
Bananymous
8ca3c5d778
Kernel: Clean up signal handling
...
We now appreciate sa_mask and SA_NODEFER and change the signal mask for
the duration of signal handler. This is done by making a sigprocmask
syscall at the end of the signal handler. Back-to-back signals will
still grow stack as original registers are popped AFTER the block mask
is updated. I guess this is why linux has sigreturn(?).
2026-04-05 02:25:59 +03:00
Bananymous
df257755f7
Kernel: If userspace sets fs or gs, dont overwrite it
...
Current cpu index is stored at either segment. If userspace sets that
segment, kernel will not overwrite it on every reschedule. This is fine
as long as user program does not use anything that relies on it :)
2026-04-04 23:48:43 +03:00
Bananymous
d7e292a9f8
Kernel: Drop 32 bit userspace stack to 4 MiB
...
32 bit userspace only has 256 MiB reserved for stacks, so with 32 MiB
stacks it only allowed total of 7 threads. Now we can have up to 62
threads
2026-04-04 23:48:43 +03:00
Bananymous
9fce114e8e
Kernel: Don't clone entire kernel stack on fork
...
We only need to copy area between [ret_sp, stack_end]. This range is
always very small compared to the whole stack (64 KiB).
2026-04-04 23:48:43 +03:00
Bananymous
9d83424346
Kernel: Remove unnecessary stack pointer loading
...
Any time I started a thread I was loading the stack pointer which is
already correctly passed :D
2026-04-04 23:48:43 +03:00
Bananymous
a29681a524
Kernel: Fix signal generation
...
We need to have interrupts enabled when signal kills the process as
process does mutex locking. Also signals are now only checked when
returning to userspace in the same place where userspace segments are
loaded.
2026-04-04 23:48:43 +03:00
Bananymous
47d85eb281
Kernel: Pass the actual vaddr range to reserve pages
2026-04-04 23:48:43 +03:00
Bananymous
85f676c30a
DynamicLoader: Calulate max loaded file count based on dtv size
...
dtv should be dynamic but i dont care right now :)
2026-04-04 23:48:43 +03:00
Bananymous
8c5fa1c0b8
DynamicLoader: Fix R_386_PC32 relocation
...
I was not accounting elf base with offset
2026-04-04 23:48:43 +03:00
Bananymous
c7690053ae
LibC: Don't crash on 32 bit pthread_create
2026-04-04 23:48:43 +03:00
Bananymous
3f55be638d
Kernel: Allow reserve_free_page{,s} to fail
...
Apparently I was asserting here before :D
2026-04-04 23:48:43 +03:00
Bananymous
664c824bc0
Kernel: Keep fast page always reserved
...
There was a bug where 32 bit target's reserve_free_page was allocating
the fast page address
2026-04-04 23:48:43 +03:00
Bananymous
e239d9ca55
ports/SDL2: Use 48 kHz floats instead of 44.1 kHz PCM16
2026-04-03 16:17:16 +03:00
Bananymous
bf1d9662d7
LibAudio: Use floats instead of doubles for samples
2026-04-03 16:15:02 +03:00
Bananymous
675c215e6a
Kernel: Add CoW support to MemoryBackedRegion
...
This speeds up fork by A LOT. Forking WindowServer took ~90 ms before
this and now its ~5 ms.
2026-04-03 01:54:59 +03:00
Bananymous
c09bca56f9
Kernel: Add fast write perm remove to page tables
2026-04-03 01:54:22 +03:00
Bananymous
7d8f7753d5
Kernel: Cleanup and fix page tables and better TLB shootdown
2026-04-03 01:53:30 +03:00
Bananymous
f77aa65dc5
Kernel: Cleanup accessing userspace memory
...
Instead of doing page validiation and loading manually we just do simple
memcpy and handle the possible page faults
2026-04-02 16:36:33 +03:00
Bananymous
9589b5984d
Kernel: Move USERSPACE_END to lower half
...
This allows calculating distance to USERSPACE_END from lower half
address
2026-04-02 16:34:47 +03:00
Bananymous
32806a5af3
LibC: Allow "t" in stdio mode
2026-04-02 15:44:50 +03:00
Bananymous
876fbe3d7c
LibC: Fix sem_{,timed}wait
2026-04-02 15:43:34 +03:00
Bananymous
c1b8f5e475
LibC: Add and cleanup network definitions
2026-04-02 15:42:00 +03:00
Bananymous
cf31ea9cbe
LibC: Add _SC_PHYS_PAGES and _SC_AVPHYS_PAGES
2026-04-02 15:41:26 +03:00
Bananymous
7e6b8c93b4
LibC: Implement strsep
2026-04-02 15:40:23 +03:00
Bananymous
dd2bbe4588
LibC: Implement sched_getcpu
2026-04-02 15:39:36 +03:00
Bananymous
e01e35713b
LibC: Allow including assert.h multiple times
...
Some shit seems to depend on this
2026-04-02 15:38:06 +03:00
Bananymous
82d5d9ba58
LibC: Write memchr, memcmp and strlen with sse
2026-04-02 15:35:03 +03:00
Bananymous
d168492462
WindowServer: bind volume up/down to volume control
2026-04-02 15:24:02 +03:00
Bananymous
6f2e8320a9
TaskBar: Show current volume level
2026-04-02 15:22:42 +03:00
Bananymous
bf4831f468
AudioServer: Add support for volume control
2026-04-02 15:21:38 +03:00
Bananymous
5647cf24d2
Kernel: Implement volume control to audio drivers
2026-04-02 15:14:27 +03:00
Bananymous
85f61aded5
BAN: Use builtins for math overflow
2026-04-02 14:49:12 +03:00
Bananymous
21639071c2
kill: Allow killing with process name
2026-04-02 05:02:05 +03:00
Bananymous
68506a789a
Kernel: Add support for volume control keys
2026-04-02 05:02:05 +03:00
Bananymous
d9ca25b796
LibC: Add FNM_CASEFOLD and FNM_IGNORECASE
...
These are part of POSIX issue 8
2026-03-25 04:27:00 +02:00
Bananymous
e9c81477d7
BAN/LibC: Implement remainder
...
This is basically just fmod but with fprem1 instead of fprem
2026-03-25 01:06:45 +02:00
Bananymous
5c20d5e291
Kernel: HDAudio hide unusable pins and cleanup path finding
2026-03-24 01:16:47 +02:00
Bananymous
f89d690716
Kernel: HDAudio only probe codecs in STATESTS
...
This removes unnecessary probing that lead to timeouts. Also cap codec
address at 14 instead of 15. My test laptop was duplicating codec 0 at
address 15 leading to duplicate devices.
2026-03-24 00:49:47 +02:00
Bananymous
c563efcd1c
AudioServer: Query pins of the asked device and not the current one
2026-03-23 22:57:49 +02:00
Bananymous
dedeebbfbe
Kernel: Use ByteRingBuffer with audio buffers
2026-03-23 22:12:40 +02:00
Bananymous
35e2a70de0
AudioServer: Handle client data before disconnecting clients
2026-03-23 20:41:13 +02:00
Bananymous
81d5c86a7a
WindowServer: Automatically launch xbanan if installed
2026-03-23 19:39:08 +02:00
Bananymous
db6644bae9
BuildSystem: Set glib-compile- binaries in meson cross file
2026-03-23 19:34:00 +02:00
Bananymous
14f1c1a358
LibC: Implement vsyslog
2026-03-23 19:13:38 +02:00
Bananymous
5be9bc64a2
ports/libxml2: Configure with -shared-libgcc
...
otherwise it doesn't seem to find libiconv due to __divdc3
2026-03-23 19:09:33 +02:00
Bananymous
64d3a5c8b7
ports: Update zlib 1.3.1->1.3.2
...
1.3.1 is no longer available at zlib.net
2026-03-23 18:54:57 +02:00
Bananymous
ccb4d13a82
Kernel: Compile EventFD file
2026-03-23 18:25:18 +02:00
Bananymous
cbe835a2c8
DynamicLoader: Add missing strlen definition
2026-03-23 18:23:31 +02:00
Bananymous
6a77754adf
LibC: Don't link against libstdc++
...
This prevented building the toolchain
2026-03-23 18:22:42 +02:00
Bananymous
7d7d5ba734
LibC: Compile eventfd file
2026-03-23 18:22:04 +02:00
Bananymous
684fa1c4b0
ports: Add pixman port
...
This fixes cairo dependencies
2026-03-23 17:58:39 +02:00
Bananymous
a98d851fde
ports: Add gtk3 port
2026-03-23 17:58:39 +02:00
Bananymous
9c3e2dab40
ports: Add pango port
2026-03-23 17:58:39 +02:00
Bananymous
eddb68f2fa
ports/mesa: Build with x support
2026-03-23 17:55:57 +02:00
Bananymous
791091174a
ports/cairo: Build with x support
2026-03-23 17:50:35 +02:00
Bananymous
dd9280c6ea
ports/expat: Add support for shared libraries
2026-03-23 17:48:19 +02:00
Bananymous
a4d83f9fdb
ports: Add xbanan port
...
This allows running x apps on top of my own GUI interface!
2026-03-23 17:47:11 +02:00
Bananymous
f42c5c4a5b
ports: Add a lot of x library ports + xeyes/xclock
2026-03-23 17:45:59 +02:00
Bananymous
186fa4f1a1
ports: Update git 2.52.0->2.53.0
2026-03-23 17:35:08 +02:00
Bananymous
09292bb87e
BAN: Cleanup math code and add SSE sqrt
...
We should prefer SSE instructions when they are easily available. For
other functions x87 is just simpler. It's hard to write faster and close
to as accurate approximations with SSE.
This does not use xmmintrin.h as clangd does not like that file and
starts throwing errors in every file that includes this :)
2026-03-22 22:07:48 +02:00
Bananymous
d18a0de879
Kernel: Fix mprotext for partial regions
...
if mprotected are did not contain the start of the region, mprotect
would exit early
2026-03-17 23:33:05 +02:00
Bananymous
cdc45935b5
Kernel: Don't allow chdir into non-directories
2026-03-17 22:57:17 +02:00
Bananymous
43e18148a6
LibC: Define SSP things
2026-03-17 20:30:25 +02:00
Bananymous
b0db645248
LibC: Add basic elf.h
2026-03-17 20:25:38 +02:00
Bananymous
07712758a7
BAN: Add default constructor to ipv4address
2026-03-17 20:24:48 +02:00
Bananymous
c1a424a635
Kernel: Implement linux's eventfd
2026-03-17 20:24:06 +02:00
Bananymous
a49588dbc7
DynamicLoader: Fix library lookup for already loaded files
2026-03-17 20:05:05 +02:00
Bananymous
1f22b9b982
DynamicLinker: Implement RTLD_NOLOAD
2026-03-17 20:04:48 +02:00
Bananymous
1d07d8e08e
LibC/DynamicLoader: Add support for dynamically loaded TLS
...
Previously I failed to dlopen if any of the objects contained TLS
section
2026-03-17 20:01:51 +02:00