Bananymous
762d575d70
AOC2023: Add program to run all days
2023-12-23 18:45:40 +02:00
Bananymous
2e77718f07
BAN: Implement find() for StringView
2023-12-23 18:43:52 +02:00
Bananymous
f371fabe35
BAN: HashSet is now internally Vector<LinkedList<T>>
...
It used to be Vector<Vector<T>> but this feels more proper
2023-12-23 16:37:21 +02:00
Bananymous
79a15132da
BAN: Cleanup HashSet
...
I now use BAN::Iterator as the base iterator. Also unstable version
was added.
2023-12-23 16:32:06 +02:00
Bananymous
bacc0db778
BAN: Fix unstable hash map rebucket
2023-12-23 16:31:42 +02:00
Bananymous
3963afe343
BAN: Add unstable version of hash map
...
This version differs only when doing rebucket. If rebucket fails,
the whole hash map is invalidated. This allows rebucketing to use
moving instead of copying.
2023-12-19 22:23:28 +02:00
Bananymous
3b21cc90ae
AOC2023: Add helper for downloading puzzle input
2023-12-19 22:22:31 +02:00
Bananymous
4e900804b8
AOC2023: Implement day16
2023-12-19 22:22:16 +02:00
Bananymous
9ec733904f
AOC2023: Implement day15
2023-12-19 21:42:59 +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
f46240e879
AOC2023: Implement day14
2023-12-19 02:49:48 +02:00
Bananymous
68627995f8
AOC2023: Implement day13
2023-12-19 01:25:23 +02:00
Bananymous
951eac6bfa
Kernel: Implement hacky non-block read for ps2 keyboard
2023-12-19 00:20:46 +02:00
Bananymous
0833d7b43f
Kernel: Allow opening files with O_NONBLOCK
2023-12-19 00:20:15 +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
d273c5e77c
rm: Use remove instead of unlink for removing files
2023-12-14 11:03:58 +02:00
Bananymous
8344f2f9ab
AOC2023: Fix day3 implementation
...
I accidently broke my day3 when messing with signed/unsigned integers
2023-12-14 11:03:19 +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
e227a87140
Kernel: Allow creating directories if path ends with '/'
...
Also create and create_dir will now fail with EEXISTS if file exists
2023-12-14 10:56:53 +02:00
Bananymous
6cd5763361
Kernel: Allow cloning of mmapped framebuffer regions
2023-12-14 10:54:06 +02:00
Bananymous
0f1c740fe8
Kernel: Implement two missing ubsan handlers needed by lai
2023-12-14 10:53:36 +02:00
Bananymous
3f3e81fcf2
Bootloader: Align boot information passed to kernel
...
UBSAN found this bug
2023-12-14 10:52:51 +02:00
Bananymous
862993398d
AOC2023: Implement day12
...
There seems to be a problem with my malloc so the hash map is not
working. This code worked fine on my linux with actually working
malloc :D
2023-12-14 10:51:48 +02:00
Bananymous
225c7c6ab4
AOC2023: Implement day11
2023-12-11 14:36:33 +02:00
Bananymous
58633ca373
AOC2023: Remove unnecessary loop
2023-12-10 20:18:59 +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
f077e17b2a
AOC2023: Implement day10
2023-12-10 18:28:04 +02:00
Bananymous
2f8759d2d3
Kernel: Make ext2 fs work with block sizes != 1024
2023-12-10 01:32:30 +02:00
Bananymous
a6bfbbf655
ls: Rewrite whole program for cleaner output
...
ls -l now sorts elements and aligns them by columns.
2023-12-10 01:05:12 +02:00
Bananymous
9d8c9baa3f
LibC: Remove unnecessary RWX mask definition
2023-12-09 19:43:49 +02:00
Bananymous
c273bf98c9
ls+stat: show setuid, setgid and sticky bits
2023-12-09 19:43:25 +02:00
Bananymous
99a5b6e2ef
AOC2023: Cleanup day9 code
...
Move tree building to its own function. Both parts can use the same
tree. This also decreaseas memory usage by one element by row :D
2023-12-09 19:08:13 +02:00
Bananymous
284a012509
Kernel: Add framebuffer information to kernel image
2023-12-09 17:33:58 +02:00
Bananymous
abc69fa3d5
Bootloader: Search framebuffer information from kernel memory
...
Framebuffer information is no longer hard coded into bootloader.
Kernel can define framebuffer info structure in its memory which is
used for finding proper video mode.
2023-12-09 17:32:10 +02:00
Bananymous
8b01e2d4a2
Bootloader: Generalize framebuffer video mode search
...
Framebuffer size is now taken as arguments to vesa_find_video_mode
2023-12-09 16:48:04 +02:00
Bananymous
0c3e5980d6
AOC2023: Implement day9
2023-12-09 16:22:43 +02:00
Bananymous
951873098e
BAN: Rewrite heap sort
...
Heap sort is now more close to gnulibc++ version. This is just more
simplified version.
2023-12-08 22:45:55 +02:00
Bananymous
2b927b9729
BAN: Restructure sort functions and namespaces
2023-12-08 18:58:47 +02:00
Bananymous
b523ccb893
AOC2023: Implement day8
...
Second part was kinda weird. You are supposted to assume something
of the input, which necessarily is not true.
2023-12-08 17:13:20 +02:00
Bananymous
7bb3172591
AOC2023: Use the default sort algorithm
2023-12-08 00:10:59 +02:00
Bananymous
be657b9b18
BAN: Add default sort. This is wrapper around sort_intro
2023-12-08 00:10:09 +02:00
Bananymous
94e6b9fa65
BAN: Implement intro sort
2023-12-07 23:56:11 +02:00
Bananymous
d8ea0eeba3
BAN: Add less than operator for iterator
2023-12-07 23:55:41 +02:00
Bananymous
6873244169
BAN: Move placement new to New.h
...
I have no idea why they were defined in Move.h
2023-12-07 23:52:57 +02:00
Bananymous
805b4096e9
BAN: Remove empty else. Builds with -Wall -Wextra
2023-12-07 23:50:35 +02:00
Bananymous
0f74e123b8
BAN: Implement ilog2 for unsigned integers
2023-12-07 23:50:04 +02:00
Bananymous
7f212106db
BAN: Implement heap sort
2023-12-07 23:18:49 +02:00
Bananymous
46c3da71b6
BAN: Cleanup sorting code
2023-12-07 23:18:49 +02:00
Bananymous
e5cab047d6
BAN: Implement more methods for iterators
2023-12-07 23:18:49 +02:00
Bananymous
bf3e9eabd5
BAN: Implement distance() for iterators
2023-12-07 23:18:49 +02:00
Bananymous
19604015de
BAN: Implement quick sort
2023-12-07 19:28:31 +02:00
Bananymous
08bc0a2815
BAN: Implement next() and prev() for iterators and use them in sorts
2023-12-07 19:28:05 +02:00
Bananymous
3bc7113cc5
sudo: fix some typos
2023-12-07 14:05:17 +02:00
Bananymous
24243268a6
Shell: do path resolution only if command doesn't contain '/'
2023-12-07 13:34:46 +02:00
Bananymous
2e858fddb5
Kernel: Remove obsolete Scheduler::is_valid_tid()
...
This function was used when processes could die at any point in time.
Now that processes can only die in known spots, we can be sure they
are not holding any locks. This allows much more performant locking.
2023-12-07 13:26:42 +02:00
Bananymous
12474addda
Kernel: Make Inodes use the new lock
...
Also remove old lock from TTY since it can just use the one Inode
already has.
2023-12-07 13:19:12 +02:00
Bananymous
7c25e4ce5a
Kernel: Implement RecursivePrioritySpinLock
...
This locks won't allow locking from userspace thread if there is
kernel thread waiting to lock this.
2023-12-07 13:18:21 +02:00
Bananymous
669d55707e
AOC2023: Use quick sort in solution
2023-12-07 11:55:28 +02:00
Bananymous
6caa9b6f95
BAN: implement quick sort and test for it
2023-12-07 11:55:28 +02:00
Bananymous
59ad639fa8
BAN: Fix simple iterator operator--()
2023-12-07 11:55:28 +02:00
Bananymous
43458cc74f
BAN: implement exchange sort and test for it
2023-12-07 11:55:28 +02:00
Bananymous
e935a33a4d
BAN: add value_type to iterators
2023-12-07 10:15:18 +02:00
Bananymous
536bb74d53
AOC2023: optimize hand score calculation
2023-12-07 09:26:17 +02:00
Bananymous
a872efdef2
BAN: implement basic swap
...
This will be improved, currently just works on general type T and
moves values between arguments.
2023-12-07 09:26:17 +02:00
Bananymous
efd8be8207
AOC2023: implement day7
2023-12-07 07:56:56 +02:00
Bananymous
06a84da844
Userspace: Implement barebones sudo
...
This doesn't do any password checking or anything. Just sets uid and
gid before execvp()
2023-12-06 18:15:42 +02:00
Bananymous
24b71d1170
Kernel: Appreciate setuid and setgid bits executables
2023-12-06 18:14:27 +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
393ac33e3c
Kernel: Make sys_nanosleep interruptable by signals
2023-12-06 16:22:24 +02:00
Bananymous
deeb6d2756
Kernel: Cleanup sys_sleep() and TTY::read_impl
2023-12-06 16:21:22 +02:00
Bananymous
1ac831d4b1
Kernel: Add API to block on semaphore until unblock or EINTR
2023-12-06 16:13:07 +02:00
Bananymous
534969df32
Kernel: Scheduler::unblock_thread() wakes sleeping threads
2023-12-06 16:12:37 +02:00
Bananymous
976ae64f88
LibC: make sleep() set errno if sleep woke up early
2023-12-06 13:13:43 +02:00
Bananymous
a12ffaa8a2
Kernel: Make sleep syscall interruptable
2023-12-06 13:13:37 +02:00
Bananymous
ff8b3be8dc
Userspace: implement basic sleep command
2023-12-06 13:05:53 +02:00
Bananymous
56008869d6
Shell: Handle keyboard input that was interrupted by signal
2023-12-06 13:04:33 +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
336daa2cc5
Kernel: Add helper for checking whether segment is from userspace
2023-12-06 12:57:13 +02:00
Bananymous
531211e09d
AOC2023: implement day6
2023-12-06 07:27:25 +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
82cb2ea20b
AOC2023: implement day5
2023-12-05 09:13:13 +02:00
Bananymous
95fc894303
LibC: fix fgets when reading empty line
2023-12-05 07:46:14 +02:00
Bananymous
622007f2ee
Shell: Verify that command exists before executing it
...
This prevents page fault somewhere when executing non-existing
commands.
2023-12-04 22:57:27 +02:00
Bananymous
cf76d2e7d9
AOC2023: remove unnecessary loop
2023-12-04 17:54:10 +02:00
Bananymous
41f8974080
AOC2023: implement day4
2023-12-04 17:51:27 +02:00
Bananymous
3ed25425a3
AOC2023: implement day3
...
Solution to second puzzle is not optimal, it definately should be
O(1) space, but I didn't want to think about it.
2023-12-03 17:07:09 +02:00
Bananymous
49f8c4268f
AOC2023: implement day2
2023-12-02 16:10:37 +02:00
Bananymous
70c224d8ea
AOC2023: Cleanup day1 code
2023-12-01 13:31:55 +02:00