6e4cd6300d
Kernel: Add copy_from_user() and copy_from_user_typed()
continuous-integration/drone/push Build is passing
2023-01-11 19:25:28 +01:00
d150c55143
TarStream: Support mode
continuous-integration/drone/push Build is passing
2023-01-11 18:42:50 +01:00
82b555cf5c
TarStream: Refactor the API to get rid of that awful method in Result
...
continuous-integration/drone/push Build is passing
That method being try_set_value_with_specific_error()
2023-01-11 17:30:53 +01:00
84c82a4e75
luna, kernel: More constness
continuous-integration/drone/push Build is passing
2023-01-10 19:31:41 +01:00
c83f6c03b5
Bitmap: Add a 'find_and_toggle' method
...
continuous-integration/drone/push Build is passing
Just like find(), but toggles the value when finding it.
Avoids doing this manually in MemoryManager and KernelVM.
2023-01-09 18:08:50 +01:00
4287ec6cb0
Bitmap: Introduce a new method 'find' and use it in MM and KernelVM
...
continuous-integration/drone/push Build is passing
This method looks for the first bit with a value, optionally from a starting index, and returns its index.
This should be (haven't benchmarked) way faster than the manual way,
AKA what MM and KernelVM were doing.
This is due to this method using bit and byte manipulation tricks instead of just calling get() until getting the desired result :)
2023-01-09 17:59:52 +01:00
b0e5d02c9a
kernel: Turn off console logging before starting the init process
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is failing
2023-01-08 15:32:59 +01:00
0c73d69a70
Kernel: Fix shadow 12GiB reserved entry when running QEMU without KVM on
...
continuous-integration/drone/push Build is passing
Fix inspired by: https://github.com/serenityos/serenity/pull/16345
2023-01-07 20:58:12 +01:00
fde1727218
KernelVM: Expand the available VM range
continuous-integration/drone/push Build is passing
2023-01-07 12:33:00 +01:00
8ee634d19b
Kernel/Scheduler: Display addresses starting with 0x when creating threads
continuous-integration/drone/push Build is passing
2023-01-07 12:02:14 +01:00
7e377ef712
Implement printf()
continuous-integration/drone/push Build is passing
2023-01-07 01:49:26 +01:00
29bd8a69fa
MemoryManager: Add helper functions to validate arbitrary ranges of userspace memory
2023-01-07 01:39:33 +01:00
a8a64863c8
kernel, libc: Add clock_gettime()
2023-01-07 00:21:08 +01:00
6e9b4491a6
MemoryManager: Add copy_to_user() and copy_to_user_typed()
2023-01-07 00:17:16 +01:00
e37280b0e5
ELFLoader: Set both the read-write and execute flags if the section has both
...
Not good for W^X, but the compiler decides to squash everything into a single program header :(
2023-01-06 17:34:24 +01:00
87a4bc91d8
arch/x86_64: Nicer display for page faults that shows a human-readable version of the error code
2023-01-06 17:31:22 +01:00
293b979e75
ELFLoader: Do not crash on non-page-aligned sections
2023-01-06 13:30:17 +01:00
fd8a0175d9
Add a syscall infrastructure (our baby program can print to the console now!)
continuous-integration/drone/push Build is passing
2023-01-05 22:39:56 +01:00
caa3fe8c45
MemoryManager: Add validate_userspace_string()
...
A bit crude, should be replaced by a strdup_from_user() helper to avoid touching userspace memory directly.
But it'll do for now.
2023-01-05 22:39:09 +01:00
0ea9974512
First user process!
...
continuous-integration/drone/push Build is passing
Putting it all together, we have a user process that successfully calls sys_exit() w/o crashing.
2023-01-05 21:55:21 +01:00
0aac6c888d
x86_64: Basic exit() syscall!
...
User processes need to do something, amirite?
2023-01-05 21:53:48 +01:00
a33a72915e
Scheduler: Creation, destruction and switching of userspace tasks :))
...
From a TarStream. Not optimal, but OK for the moment.
2023-01-05 21:52:26 +01:00
ea89b92675
Store a bit more stuff in a thread :)
2023-01-05 21:50:53 +01:00
31ea030c7f
MMU: Add functions to create and delete userspace page directories
2023-01-05 21:50:26 +01:00
c53bba0392
MemoryManager: Add an unmap_weak_and_free_vm() helper function
...
This function mirrors unmap_owned_and_free_vm(), but using weak unmapping (does not free the underlying physical memory)
2023-01-05 21:50:06 +01:00
d3c414af4e
ELFLoader: Do not keep track of segments
...
This reduces calls to kmalloc() since segment data is heap-allocated, and the segments loaded will be deleted when deleting the page directory.
2023-01-05 21:46:03 +01:00
5854e5e530
Add newlines at end-of-file
2023-01-02 13:07:29 +01:00
4081186b27
Heap: Rewrite kmalloc to use Option<HeapBlock*> instead of nullable pointers to iterate over the heap
...
continuous-integration/drone/push Build is passing
At some point, this should be done inside LinkedList itself, but we have no such thing as break in for_each().
It's iterate over everything or nothing.
This also requires operator= in Option, might be also added to Result in the future.
2022-12-30 19:02:25 +01:00
24773fbece
kernel/main: Remove reference to 'extern const BOOTBOOT bootboot'
2022-12-30 18:38:50 +01:00
74aa30a44f
Init: Call efficient_halt() on magic number mismatch instead of busy-looping
2022-12-30 18:36:22 +01:00
9569385691
Remove unused include
2022-12-30 18:32:44 +01:00
7952d1d8a0
x86_64: Add basic keyboard support with an ASYNC DRIVER
continuous-integration/drone/push Build is passing
2022-12-26 19:59:18 +01:00
ed34009b50
Heap: Log more details of blocks
continuous-integration/drone/push Build is passing
2022-12-26 16:17:24 +01:00
1c70ab5a1a
Heap: Avoid combines with blocks outside a range
2022-12-26 15:20:56 +01:00
a1eca479d5
x86_64: Add a getter for the initial page directory
continuous-integration/drone/push Build is passing
2022-12-26 12:57:25 +01:00
2600acc96c
Thread: Add init_regs_user()
2022-12-26 12:46:07 +01:00
7e62ee66be
Change heap.first().has_value() to the cheaper heap.count()
continuous-integration/drone/push Build is passing
2022-12-26 12:24:39 +01:00
73c58bd902
Init: Move platform_init() before MemoryManager::init()
...
continuous-integration/drone/push Build is passing
This enables NX before we actually use it.
Wasn't causing problems with KVM on, but crashed with KVM off with a 'reserved bit set' page fault.
2022-12-26 12:12:55 +01:00
0054777e7d
x86_64: Warn if NX is not supported
2022-12-26 12:11:10 +01:00
08984e1673
x86_64: Create a has_flag() helper function and remove redundant clearing of reserved bits
2022-12-26 12:10:47 +01:00
59d69f684f
x86_64: Add general protection fault handler
continuous-integration/drone/push Build is passing
2022-12-24 11:49:47 +01:00
f2cc797599
Add a simple ELF loader
continuous-integration/drone/push Build is passing
2022-12-23 13:09:21 +01:00
ad0f6546d7
Add a global initrd TarStream to make the initial ramdisk accessible everywhere
...
continuous-integration/drone/push Build is passing
It's also mapped into virtual memory instead of directly going into the physical location!!
2022-12-23 11:33:23 +01:00
6ff92b1714
MemoryManager: Add get_kernel_mapping_for_frames()
...
This function allocates a continuous range of VM and maps the physical frames passed to said VM range.
2022-12-23 11:30:49 +01:00
9afaad8fed
Add dbgln() for the luna library
continuous-integration/drone/push Build is passing
2022-12-22 18:00:35 +01:00
a3595e71a9
Update .clang-format
continuous-integration/drone/push Build is passing
2022-12-21 20:22:44 +01:00
fcefab4383
TextConsole: Add wide-character overloads for print() and println()
...
continuous-integration/drone/push Build is passing
These can't fail from UTF-8 decoding errors.
2022-12-21 19:41:13 +01:00
293b7b0f11
TextConsole: Propagate UTF-8 decoding errors
continuous-integration/drone/push Build is passing
2022-12-21 17:38:19 +01:00
2e8ea724a0
arch/x86_64: Refactor the stack tracing code to remove duplicate code
continuous-integration/drone/push Build is passing
2022-12-21 17:21:01 +01:00
e2a6cba3c6
Log: Update formatting to make ANSI weirdness more sensible
continuous-integration/drone/push Build is passing
2022-12-19 21:42:53 +01:00
703c3f44fb
Add two FIXMEs
continuous-integration/drone/push Build is passing
2022-12-19 21:41:27 +01:00
042f999677
Heap: SCRUB IT ALL
...
continuous-integration/drone/push Build is passing
If your memory is all 0xacacacac there is a big probability you haven't initialized it.
2022-12-19 13:20:38 +01:00
a11a5dec1f
DoublyLinkedList -> LinkedList
continuous-integration/drone/push Build is passing
2022-12-19 12:43:23 +01:00
1269a045bd
LinkedList: Add a convenience delayed_for_each() method.
...
This is a special way of iterating over the list which permits removing items while iterating.
2022-12-19 12:41:25 +01:00
5b72144fac
Add a handy consume() method to LinkedList
continuous-integration/drone/push Build is passing
2022-12-19 12:35:08 +01:00
92a7004c2f
Move the reaping logic to Scheduler
2022-12-19 12:24:15 +01:00
60520dff4c
Make MemoryManager's scope guards more robust
continuous-integration/drone/push Build is passing
2022-12-19 11:55:53 +01:00
0bdbffe0ca
Spinlock+LockedValue: Add try_lock() methods
...
continuous-integration/drone/push Build is passing
For when you want to lock a resource if possible but not get blocked if it is locked by another thread.
2022-12-18 20:37:26 +01:00
283e641ece
Spinlock+LockedValue: Remove init() functions
...
Let's set the default (unlocked) value of Spinlock's underlying atomic to 0, so even if the constructor is not called it stays like that.
2022-12-18 20:36:15 +01:00
a63146a798
Show the date and time of build :)
continuous-integration/drone/push Build is passing
2022-12-18 18:51:25 +01:00
751377de0a
Scheduler: Make it possible for a thread to stop existing
continuous-integration/drone/push Build is passing
2022-12-18 18:43:34 +01:00
1b92fe36b4
Store the stack inside a thread
2022-12-18 18:43:17 +01:00
6c3b7672a0
Kernel: Demo the initrd using TarStream
...
continuous-integration/drone/push Build is passing
Yes, we're using the physical address. Not optimal, this is only for demo purposes.
2022-12-18 16:39:35 +01:00
ffd3385d0d
TextConsole: decoder -> utf8_decoder
continuous-integration/drone/push Build is passing
2022-12-18 14:42:53 +01:00
36179155e1
Add UTF-8 support to TextConsole!!
...
continuous-integration/drone/push Build is passing
Not much support, since the font only covers codepoints from U+0000 to U+00FF,
(Basic Latin & Latin Extended-A), but unprintable code-points are rendered as ONE box per code-point,
instead of multiple garbage characters.
So it's Unicode-aware, even if it can't print most characters.
2022-12-18 13:09:37 +01:00
a89ae9bed7
Run include-what-you-use
continuous-integration/drone/push Build is passing
2022-12-17 15:51:19 +01:00
1b867151bd
MemoryManager: Run include-what-you-use
continuous-integration/drone/push Build is passing
2022-12-17 15:47:35 +01:00
95b0091622
Split off arch/x86_64/CPU.cpp into various files
continuous-integration/drone/push Build is passing
2022-12-17 15:45:06 +01:00
799a02c883
Remove unnecessary std:: prefix from inside std
continuous-integration/drone/push Build is passing
2022-12-17 15:33:47 +01:00
d5b9ff1569
Remove unused function definition
continuous-integration/drone/push Build is passing
2022-12-17 15:30:57 +01:00
c5220cbf64
LinkedList: Rename append_after to add_after
2022-12-17 15:27:00 +01:00
59c9d8f119
asm -> asm volatile
continuous-integration/drone/push Build is passing
2022-12-17 14:32:24 +01:00
f77126768f
Improve message
2022-12-17 13:48:22 +01:00
abbed13f27
Add a 'pure' variant of cstyle_format which is infallible
...
If we cannot fail to output, it doesn't make sense to propagate errors. So if you're SURE there are no errors, use pure_cstyle_format().
If, however, output can fail, use cstyle_format().
This has a drawback of adding quite a bit of code duplication to Format.cpp.
Some of it is dealt using templates, but some code still remains duplicate.
2022-12-17 12:38:22 +01:00
df9a13cbfb
KernelVM: Make g_used_vm atomic and g_kernelvm_bitmap a LockedValue
continuous-integration/drone/push Build is passing
2022-12-17 10:56:24 +01:00
132963070b
MemoryManager: Make some variables atomic and the frame bitmap a LockedValue
2022-12-17 10:56:24 +01:00
f97515bd7e
Kernel: Add Spinlock and LockedValue<T>
2022-12-17 10:55:54 +01:00
6e5d2b5335
Thread: Make g_next_id atomic
2022-12-17 10:50:49 +01:00
9d6235e109
CPU: Add a pause() method
2022-12-17 10:45:55 +01:00
b316e3b3b7
Print stack trace on assertion fail
continuous-integration/drone/push Build is passing
2022-12-16 20:49:09 +01:00
59765aa334
Rename String.h -> CString.h
...
continuous-integration/drone/push Build is passing
Let's not confuse String.h with a managed string class, it's in fact the equivalent of the C stdlib's <string.h>
2022-12-16 20:40:04 +01:00
2e24e09146
Convert MemoryMapIterator to Option
continuous-integration/drone/push Build is passing
2022-12-16 19:47:20 +01:00
a32590ff8a
Call expect_value more
2022-12-16 19:44:33 +01:00
cedcfa9c63
Improve cleanup on MemoryManager failure + add methods that use KernelVM
continuous-integration/drone/push Build is passing
2022-12-16 19:36:38 +01:00
814672c771
Remove some redundant error propagation
...
continuous-integration/drone/push Build is passing
Why can printing to the serial port or format onto a string fail?
Even if cstyle_format returns Result<usize>, we shouldn't always follow suit.
2022-12-16 18:32:29 +01:00
41b3c8adb2
Convert to_dynamic_unit to OwnedStringView and rename the old variant to to_dynamic_unit_cstr
continuous-integration/drone/push Build is passing
2022-12-16 18:18:24 +01:00
d759058b80
Introduce std::nothrow
...
Let's make sure we explicitly tell new that we don't want exceptions
2022-12-16 18:14:48 +01:00
da104c87cb
Heap: Return Option in split()
2022-12-08 16:09:12 +01:00
b6173e2b67
LinkedList: Return Option instead of ENONE if no value
2022-12-08 16:09:04 +01:00
6cee208e62
Kernel: Enable -Wsign-conversion
...
continuous-integration/drone/push Build is passing
For real this time, turns out me, being dumb, added it to Luna instead of the kernel.
2022-12-08 15:09:32 +01:00
779fda307a
More scope guards!!
continuous-integration/drone/push Build is passing
2022-12-08 15:01:04 +01:00
1d5d1daa57
Add scope guards
2022-12-08 14:56:11 +01:00
c8302a4fef
Add convenience functions to print the stack trace directly
continuous-integration/drone/push Build is passing
2022-12-07 18:11:24 +01:00
0d437cfcca
Add support for stack traces
continuous-integration/drone/push Build is passing
2022-12-07 17:39:59 +01:00
d93d95f23c
Add sleeping mechanism
2022-12-07 16:11:59 +00:00
757cee4693
Add accessors for when you're sure a linked list is not empty
2022-12-07 16:11:59 +00:00
70497c37fb
Check for runnable threads
2022-12-07 16:11:59 +00:00
57517252d8
Add a state to Thread
2022-12-07 16:11:59 +00:00
f169718a4b
Initialize and demo the scheduler
2022-12-07 16:11:59 +00:00
c907e16311
x86_64: Invoke the scheduler every millisecond
2022-12-07 16:11:59 +00:00