Bananymous
8fd0162393
Kernel: Rewrite x86_64 page tables to use HHDM instead of kmalloc
...
This allows page tables to not crash the kernel once kmalloc runs out of
its (limited) static memory.
2024-10-14 11:40:30 +03:00
Bananymous
f0b18da881
Kernel: Add kmalloc helper APIs
2024-10-14 11:39:04 +03:00
Bananymous
5f63ea8f8a
Kernel: Add CPUID check for 1 GiB page support
2024-10-14 11:38:03 +03:00
Bananymous
2b43569927
Kernel: Use enums in boot info instead of magic values
2024-10-14 11:36:51 +03:00
Bananymous
4ba33175cf
Kernel: Don't leak memory when preparing fast page
...
For some reason I was allocating memory for page table entry...
2024-10-14 11:34:48 +03:00
Bananymous
3edc1af560
Kernel: Don't map main bios area in page table initialization
...
This is only needed for RSDP lookup so it can be done with fast pages
2024-10-14 11:32:54 +03:00
Bananymous
55fbd09e45
Kernel: Rewrite physical memory allocation with PageTable::fast_pages
2024-10-14 11:32:54 +03:00
Bananymous
6a46a25f48
image: Add benchmark flag to measure performance of image operations
2024-10-13 22:05:13 +03:00
Bananymous
88b8ca5b29
LibC: Fix some string functions
...
I was not casting some required values to char or handling length of
zero
2024-10-13 22:04:08 +03:00
Bananymous
fdddb556ae
LibC: Implement system() more properly
...
Old implementation did not ignore and block needed signals
2024-10-13 22:03:15 +03:00
Bananymous
d36b64e0c8
LibImage: name color to u32 function to to_argb from to_rgba
...
This is the actual format that it returns
2024-10-13 22:01:46 +03:00
Bananymous
8adc97980a
Shell: rewrite the whole shell to use tokens instead of raw strings
...
tab completion is still running with raw strings and that has to be
fixed in the future.
2024-10-13 22:00:16 +03:00
Bananymous
dab6e5a60f
BAN: Cleanup HashMap implementation and add {insert,emplace}_or_assign
2024-10-13 22:00:16 +03:00
Bananymous
0b05e9827b
BAN: Use memmove instead of memcpy on overlapping data
...
I was accidentally using memcpy where memmove was needed
2024-10-13 22:00:16 +03:00
Bananymous
1c1a76d6d7
BAN: Member function pointers now use references instead of pointers
...
This seems cleaner as class pointer cannot be null anymore
2024-10-13 22:00:16 +03:00
Bananymous
df4f37d68d
BAN: only define placement new operators for banan-os targets
...
This allows building and using BAN library outside of banan-os!
2024-10-10 21:55:25 +03:00
Bananymous
44629ba5dd
BAN: Allow userspace to use string literals with BAN::Error
2024-10-10 21:54:52 +03:00
Bananymous
2da6776451
BAN: Update {Byte}Span API with better constness
...
const BAN::Span<int> is now allowed to modify its underlying data, but
the container itself is const.
BAN::Span<const int> can be used for spans over constant data.
2024-10-10 21:53:23 +03:00
Bananymous
a68f411024
BAN: Add requires clauses for Container::emplace{,_back} functions
...
This allows syntax highlighters to report errors!
2024-10-10 21:51:44 +03:00
Bananymous
166550fbba
Kernel: Ext2 check if file exists before creating it
2024-10-07 18:21:05 +03:00
Bananymous
3e68981b0b
userspace: Remove start-gui from shell builtins and make it an alias
...
This makes way more sense :D
2024-10-07 18:01:33 +03:00
Bananymous
6fd76e8d1e
Shell: Rewrite alias parsing to allow chained commands
...
You can now have "chained" commands in alias
e.g. `alias foo='echo hello && ls`
2024-10-07 18:01:33 +03:00
Bananymous
dfcd15e7c4
Shell: Implement background processes with &
2024-10-07 18:01:33 +03:00
Bananymous
5fa359c28d
ls: Print file name in quotes if it contains spaces
2024-10-07 18:01:32 +03:00
Bananymous
5bcfc9dd50
Shell: Always print prompt to new line
...
This is only done on non banan-os targets if terminal is detected to
support cursor position querying
2024-10-07 18:01:32 +03:00
Bananymous
f67cad326a
Shell: Don't crash when there are no tab completions available :D
2024-10-07 14:26:07 +03:00
Bananymous
9775e83374
Shell: Fix tab space escaping in tab completion
2024-10-07 04:19:36 +03:00
Bananymous
264d1798dc
Shell: Clenup code and fix some bugs
...
Don't list tab completion multiple times, allow `clear` to work even
when ANSI CSI 3K is not supported, reset buffer index when cancelling
command with ctrl+c
2024-10-07 04:10:25 +03:00
Bananymous
1824988b9a
Shell: Add support for simple aliases
...
Aliases do not support chained commands with pipes, &&, ... but this is
a good start.
2024-10-07 04:09:38 +03:00
Bananymous
c54d9b3f60
Shell: Implement simple tab completion for commands and files
2024-10-07 01:44:44 +03:00
Bananymous
f432d3fcf8
BAN: Cleanup Optional casting for value getters
2024-10-07 01:44:44 +03:00
Bananymous
4f7828bab9
Shell: Allow escaping spaces in commands
2024-10-07 01:44:44 +03:00
Bananymous
ae073a336d
Shell: Move builtin commands to a hash map
...
This allows accessing builtin commands outside of `execute_builtin`
2024-10-07 01:44:44 +03:00
Bananymous
6f90974896
BAN: Fix StringView::starts_with
...
I have no idea what i had been thinking when writing this code :D
2024-10-06 06:23:25 +03:00
Bananymous
4f3c05851c
Shell: Expand ~ to home if its at the start of non quoted argument
2024-10-06 01:38:43 +03:00
Bananymous
4b13055125
Shell: Make builtin exit command read exit value from argument
...
Shell used to unconditionally return with exit code of 0
2024-10-06 01:24:34 +03:00
Bananymous
d542cd811d
Shell: Add support for &&, || and ;
2024-10-06 01:24:24 +03:00
Bananymous
f75cebac7e
Shell: Mark all functions as static
2024-10-05 19:11:58 +03:00
Bananymous
e302b6b635
Shell: Use sigaction instead of signal
...
This allows ctrl-c to work on linux :D
2024-10-05 19:07:59 +03:00
Bananymous
f709e88994
Shell: Cleanup argument handling and exiting
2024-10-04 17:54:01 +03:00
Bananymous
ab9a6d583b
Userspace: Set SHELL environment variable in init instead of shell
2024-10-04 17:24:37 +03:00
Bananymous
26d6bf338e
Shell: Ignore SIGTTOU and set pgroup from parent instead of child
...
This allows using the shell in linux!
2024-10-04 17:23:31 +03:00
Bananymous
b6e040dfc2
Kernel/Shell: Fix backspace and delete key byte sequences
2024-10-04 04:14:47 +03:00
Bananymous
f5802ca3e5
General: Update screenshot in README
2024-09-30 18:28:16 +03:00
Bananymous
7223e581a2
WindowServer: Fix 32 bit compilation with -Werror
...
There was a always false statement on 32 bit that the compliler was
warning about.
2024-09-27 15:33:25 +03:00
Bananymous
2d11ce9669
Kernel: Fix interrupt system
...
I had not understood how MSIs work and I was unnecessarily routing them
through IOAPIC. This is not necessary and should not be done :D
Also MSIs were reserving interrupts that IOAPIC was capable of
generating. Now IOAPIC and MSIs use different set of interrupts so
IOAPIC can use more interrupts if needed.
2024-09-27 15:31:31 +03:00
Bananymous
e4982a1a5c
LibC: Fix printf with alternate format and zero values
2024-09-26 15:25:16 +03:00
Bananymous
cea6dedccc
Userspace: Compile programs and libraries with -Wall -Wextra -Werror
2024-09-26 15:20:07 +03:00
Bananymous
e6ed5a388d
BuildSystem: Export compile commands for clangd
2024-09-26 15:14:54 +03:00
Bananymous
b89fc3fe87
Kernel: Implement ANSI SGR 7 to invert colors
...
This allows vim's visual selection to show up
2024-09-26 15:08:11 +03:00
Bananymous
57ae74f908
Terminal: Implement more ANSI escape handling
...
This patch adds L and M codes for inserting and deleting lines and SGR 7
for inverting colors
2024-09-26 15:07:08 +03:00
Bananymous
1a6804b4b4
Terminal: Make Terminal::handle_csi() return invalidated rectangle
...
When I updated Terminal to only do a single invalidation after all of
input text was printed, I forgot to change handle_csi
2024-09-26 15:05:11 +03:00
Bananymous
82e6a3582d
LibGUI: cleanup Window::shift_vertical and add copy_horizontal_slice
2024-09-26 15:00:14 +03:00
Bananymous
11a4e4faa2
LibImage: Add Adam7 support for PNG decoder
2024-09-26 11:47:34 +03:00
Bananymous
50a3533322
LibInput: Add value for ESC in key_to_utf8_ansi
...
This allows exiting vim when using this function for key mappings :D
2024-09-24 18:08:34 +03:00
Bananymous
4e9f39384a
LibC: Initialize libc only once
...
This was breaking stuff with dynamic loader initializing libc and main
executable reinitializing it later :D
2024-09-24 17:56:12 +03:00
Bananymous
39802b56c1
Kernel: Allow SYS_EXEC to fail at any point
...
This patch builds new executable image to another pml4 structure and
only after everything is validated will current context be replaced.
This allows exec to fail "late" where previously it would panic the
kernel or kill the process. This allows graceful handling of exec
failures in userspace!
2024-09-24 16:29:38 +03:00
Bananymous
ebb87ccdde
Kernel: Add asserts for overflow checks with ms -> ns conversions
2024-09-24 16:28:44 +03:00
Bananymous
f0e55938c1
Kernel: Allow initial binding of threads to specific processor
2024-09-24 16:27:40 +03:00
Bananymous
348d04f7f5
Kernel: Implement static Process::kill()
...
This allows killing processes even when there does not exist a current
thread.
2024-09-24 13:16:43 +03:00
Bananymous
1b0086217c
Terminal: Do scrolling in putchar if necessary
...
I overlooked that handling *newline* scrolls would be enough. You can
definitely scroll more if printing a lot of text which wraps to the next
line.
2024-09-23 15:00:47 +03:00
Bananymous
d395cf38b7
Kernel: Binding to port 0 will always find unused port
2024-09-22 17:30:01 +03:00
Bananymous
57aec2a733
Kernel: Validate pointer's when printing stack trace
...
There was an kernel panic if stack trace contained uncanonical
addresses.
2024-09-22 17:16:01 +03:00
Bananymous
ae89237453
Kernel: Disable warning when calling syscall
...
This warning is only generated when compiling with UBSAN and I don't see
how the value would even be uninitialzed.
2024-09-22 17:15:07 +03:00
Bananymous
60d5257678
Kenrel: Add __builtin_unreachable support for UBSAN
2024-09-22 17:14:36 +03:00
Bananymous
d59463d11b
Kernel: Fix TTY reading one keyevent after disabling input handling
2024-09-22 17:13:10 +03:00
Bananymous
1280528e4e
BuildSystem: Use -O2 for all libraries
...
I don't know why I had not specified optimization level for libraries.
Only LibImage was using explicit -O3. LibImage doesn't need O3 anymore
as O2 seems to be around the same speed.
2024-09-20 20:04:49 +03:00
Bananymous
23d6205659
Kernel: Move DEBUG_* macros to centralized Debug.h
...
This makes toggling debug info much easier
2024-09-20 11:00:07 +03:00
Bananymous
bc0acc6f44
Kernel: Validate network packet sizes before casting
...
This caused a lot of crashes on invalid packets :D
2024-09-20 10:46:59 +03:00
Bananymous
b8622f2b4b
Kernel: Implement simple RTL8169 driver
...
This allows me to use internet when running banan-os on my hardware!
2024-09-19 22:58:03 +03:00
Bananymous
7f0c39fe91
Kernel: Don't crash the kernel if packet is smaller than ethernet hdr
2024-09-19 22:51:55 +03:00
Bananymous
a489be0e05
Kernel: Allow parallel LAPIC timer initialization with HPET
...
HPET supports reading LAPIC counter without locks, so it can be done in
parallel. This makes booting much faster. Previously initializing every
timer took 100 ms, so 16 CPUs took total of 1.6 seconds. This allows
doing it all in 100 ms.
2024-09-19 14:41:59 +03:00
Bananymous
8e08046519
Kernel: Add asserts about having locked TTY's write lock
...
This for some reason fixes booting on real hardware? :D
2024-09-18 00:56:48 +03:00
Bananymous
999eb53364
Kernel: Release debug lock if its locked during kernel panic
...
Also kernel panic now prints if it had lock
2024-09-18 00:56:02 +03:00
Bananymous
f7e549e412
Toolchain: Run strip after installing toolchain
...
This drops installed toolchain size to around fifth :D
2024-09-17 22:30:40 +03:00
Bananymous
fbb99de728
ls: Show symlink target with -l
2024-09-17 19:12:34 +03:00
Bananymous
0620ed3d4f
Kernel: Fix file open permissions for some syscalls
2024-09-17 19:11:48 +03:00
Bananymous
b779b3cf2d
Kernel: Move file finding code to a helper
2024-09-17 18:52:52 +03:00
Bananymous
a6b973003b
WindowServer: chmod the correct file
2024-09-17 18:35:27 +03:00
Bananymous
e431e90b20
Kernel/LibC: Implement all chown family function with fchownat
2024-09-17 18:35:01 +03:00
Bananymous
4aa466b948
Kernel/LibC: Implement all chmod family functions using fchmodat
2024-09-17 17:19:26 +03:00
Bananymous
04ae53b6df
Shell: Add back accidentally deleted cd and time builtins
2024-09-17 16:38:45 +03:00
Bananymous
3666525d24
Kernel/LibC: Implement readlink in terms of readlinkat
2024-09-17 16:38:15 +03:00
Bananymous
f1a4bbce53
Kernel/LibC: Implement all stat family functions with fstatat
...
This patch gets rid of 2 unnecessary syscalls!
2024-09-17 16:38:01 +03:00
Bananymous
708a720d9d
Kernel: Remove SYS_OPEN
...
This can be done with SYS_OPENAT with fd set to AT_FDCWD
2024-09-17 16:16:47 +03:00
Bananymous
7177da7d62
LibC: Implement dummy get_rusage
...
One port seems to use this function. This dummy just reports no used CPU
time for current process nor children
2024-09-17 15:59:22 +03:00
Bananymous
5e4aa75e03
Kernel: Perform access checks when creating a file or a directory
...
Also SYS_CREATE_DIR now uses correct relative path. It used to always
create files relative to root. And as no permission checks were tested,
file creation succeeded to root as long as path did not contain '/' :D
2024-09-17 15:57:07 +03:00
Bananymous
d88ee5c9ee
Kernel/LibC: Implement creat with open
...
This allows getting rid of unnecessary SYS_CREATE. Directory creation
still has its own syscall, but I could combine it with SYS_OPEN also.
2024-09-17 15:55:53 +03:00
Bananymous
d4ea720239
Kernel: Don't crash the kernel if ext2 encounters disk error
...
This will most likely result in a corrupted filesystem, but crashing the
kernel is too much :D
2024-09-17 15:54:33 +03:00
Bananymous
97ee370ffe
Kernel: Allow listing files even if one of directories blocks are empty
2024-09-17 15:53:14 +03:00
Bananymous
a084f83f4c
Kernel: Rework kernel-side ELF loading
...
ELFs are now loaded as MemoryRegions so they don't need special handling
anywhere. This also allows file backed COW optimizations to work. This
was not the case before.
This patch removes now obsolete LoadableELF and unused ELF files from
LibElf.
2024-09-15 23:57:34 +03:00
Bananymous
54732edff4
Kernel: Fix bugs in memory regions
...
MemoryRegion::initialize() required size to be page aligned, this is not
necessary.
MemoryBackedRegion::copy_data_to_region() required user-write
permissions for underlying data. This did not matter as memory backed
regions dont support COW memory, but it could lead to bugs later on.
2024-09-15 23:18:05 +03:00
Bananymous
1a24d1839f
LibInput: KeyEvent to ansi string now handles delete key
...
This allows Terminal emulator to also handle delete key.
The value of `\0x7F` may be wrong as qemu's serial console seems to be
sending `\e[3~`
2024-09-15 03:13:21 +03:00
Bananymous
c3040a04a3
Terminal: Optimize printing a lot
...
Terminal used to run `yes` at around 400 lines per second
This patch pumps that to over 100'000 lines per second!
There are 2 optimizations done:
1. only invalidate window once after rendering is done
2. if printing more than `rows()` newlines skip prior data
2024-09-15 03:12:26 +03:00
Bananymous
7feb4c4ebd
Kernel: VFS::file_from_absolute_path now used root_file() API
2024-09-15 02:38:25 +03:00
Bananymous
2911d1f018
Kernel: Cleanup and fix pseudo terminals
2024-09-15 02:38:07 +03:00
Bananymous
d68ad893f0
Kernel/Shell: Add support for delete key
2024-09-14 22:45:48 +03:00
Bananymous
4ca147699d
Shell: use printf and putchar instead of fprintf and fputc
2024-09-14 22:37:09 +03:00
Bananymous
abed41b8fa
Shell: Remove builtin tests
...
Test should be programs in /bin instead
2024-09-14 22:28:33 +03:00
Bananymous
2604a55f80
Shell: Make ctrl+c start a new command
2024-09-14 22:27:32 +03:00