Commit Graph

834 Commits

Author SHA1 Message Date
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!)
All checks were successful
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!
All checks were successful
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
All checks were successful
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
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-26 19:59:18 +01:00
ed34009b50
Heap: Log more details of blocks
All checks were successful
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
All checks were successful
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()
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-26 12:24:39 +01:00
73c58bd902
Init: Move platform_init() before MemoryManager::init()
All checks were successful
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
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-24 11:49:47 +01:00
f2cc797599
Add a simple ELF loader
All checks were successful
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
All checks were successful
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
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-22 18:00:35 +01:00
a3595e71a9
Update .clang-format
All checks were successful
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()
All checks were successful
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
All checks were successful
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
All checks were successful
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
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-19 21:42:53 +01:00
703c3f44fb
Add two FIXMEs
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-19 21:41:27 +01:00
042f999677
Heap: SCRUB IT ALL
All checks were successful
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
All checks were successful
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
All checks were successful
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
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-19 11:55:53 +01:00
0bdbffe0ca
Spinlock+LockedValue: Add try_lock() methods
All checks were successful
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 :)
All checks were successful
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
All checks were successful
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
All checks were successful
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
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-18 14:42:53 +01:00
36179155e1
Add UTF-8 support to TextConsole!!
All checks were successful
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
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-17 15:51:19 +01:00
1b867151bd
MemoryManager: Run include-what-you-use
All checks were successful
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
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-17 15:45:06 +01:00
799a02c883
Remove unnecessary std:: prefix from inside std
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-17 15:33:47 +01:00
d5b9ff1569
Remove unused function definition
All checks were successful
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
All checks were successful
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
All checks were successful
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
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-16 20:49:09 +01:00
59765aa334
Rename String.h -> CString.h
All checks were successful
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
All checks were successful
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
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-16 19:36:38 +01:00
814672c771
Remove some redundant error propagation
All checks were successful
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
All checks were successful
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
All checks were successful
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!!
All checks were successful
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
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-07 18:11:24 +01:00
0d437cfcca
Add support for stack traces
All checks were successful
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
13f5d09cfd Add a Scheduler!! 2022-12-07 16:11:59 +00:00
12aa014a3d Add a Thread class which can be part of a DoublyLinkedList 2022-12-07 16:11:59 +00:00
fbd290c01b KernelVM: clean up a bit 2022-12-07 16:11:59 +00:00
0bbd026660 CPU.h: pragma once 2022-12-07 16:11:59 +00:00
5d988c088f Make idle_loop noreturn 2022-12-07 16:11:59 +00:00
c657b302c9 Timer: add raw_ticks 2022-12-07 16:11:59 +00:00
fd6a74e61c CPU: Add an idle_loop method 2022-12-07 16:11:59 +00:00
287c4ab060 Run clang-format 2022-12-07 16:11:59 +00:00
bbfaa4645a Add a should_invoke_scheduler method 2022-12-07 16:11:59 +00:00
1badc40a4a
Run include-what-you-use everywhere 2022-12-07 11:40:02 +01:00
c2927de191
Remove unused includes
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-07 11:22:34 +01:00
dad95a8160
Map the page bitmap to virtual memory 2022-12-07 10:58:59 +01:00
1ebd892c16
Convert uses of u64 to usize
Not all of them, but if you're measuring a size it's more appropriate to use usize than u64.
2022-12-07 10:55:47 +01:00
8598b1e8fc
Replace the _noreturn macro with the C++ native attribute [[noreturn]]
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 19:40:35 +01:00
c099877c35
Remove unnecessary error propagation in Log.cpp
All checks were successful
continuous-integration/drone/push Build is passing
Serial and TextConsole always succeed, no need to act as if they could fail
2022-12-06 19:35:34 +01:00
314acbfe21
Change the serial log to display only milliseconds
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 19:31:41 +01:00
39b310b6b9
Make alignment a template parameter to help the compiler optimize
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 19:27:58 +01:00
d48eb85d1d
Heap: Avoid magic numbers
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 19:05:00 +01:00
09e447d9d2
Heap: Use LinkedList instead of doing things manually 2022-12-06 18:28:04 +01:00
2734353a5d
Heap: Just align it on a 16-byte boundary if it's not aligned 2022-12-06 18:21:19 +01:00
cccf89dd16
Heap: Remove outdated FIXME 2022-12-06 18:20:18 +01:00
a021e7a309
Move make and destroy to luna
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-06 16:41:22 +01:00
b338126854
Heap: Use safe_mul in kcalloc() 2022-12-06 15:44:21 +01:00
8ff9cb4b96
x86_64: Add a friendlier handler for page faults
All checks were successful
continuous-integration/drone/push Build is passing
2022-12-05 21:02:21 +01:00
1d0dd8fa93
Use KernelVM in kmalloc() and friends
Much better now!!
2022-12-05 21:02:05 +01:00
ba758bcef8
Initialize the KernelVM 2022-12-05 21:01:18 +01:00
6c3024d4ee
Heap: Count the heap blocks' size in the size required for an allocation 2022-12-05 21:01:06 +01:00
0edabd6d87
Heap: Add a new block to the end of the linked list
*facepalm*

This was causing page faults when having two blocks and the first one (oldest one) being freed first.
2022-12-05 21:00:21 +01:00
d445b29477
Add a virtual memory allocator for the kernel 2022-12-05 20:36:24 +01:00
762131a425
Make more constexpr 2022-12-05 16:43:52 +01:00
2eaa458555
Remove release_value call 2022-12-05 16:41:39 +01:00
1e3706ac01
Make ARCH_PAGE_SIZE and ARCH_TIMER_FREQ known at compile-time 2022-12-05 16:36:41 +01:00
4f183958e3
General constness + [[gnu::packed]] everywhere 2022-12-05 16:13:38 +01:00
a63a8b32b5
Make new and delete noexcept and return nullptr on failure 2022-12-05 13:45:32 +01:00
891320f7d3
Heap: Make const 2022-12-05 13:41:58 +01:00
ea7893ba71
Make CHECK_PAGE_ALIGNED use expect() instead of check() 2022-12-05 13:28:36 +01:00
55a30ac487
Make CHECK_PAGE_ALIGNED use expect() instead of check() 2022-12-05 13:26:50 +01:00
bfd4647467
Rename largest_free -> largest_free_entry 2022-12-05 13:26:09 +01:00
d9fc50f1ea
Make MemoryMapEntry have private fields with public getters 2022-12-05 13:23:01 +01:00
ec1354fc8d
const in TextConsole 2022-12-05 13:06:12 +01:00
58ecf11424
Make all refs to the bootboot structure const 2022-12-05 13:04:01 +01:00
54ce511f1d
More const 2022-12-05 13:00:41 +01:00
3b77ba6b04
EVERYTHING IS CONSTANT IN THIS UNIVERSE
Here's one advantage of Rust over C++:
Immutability by default. In Rust, you have to mark a variable as mutable, whereas in C++ you have to mark it as immutable.

What's the problem here? Usually, most variables don't need mutability. Thus we end up with const all over the place.
2022-12-05 12:49:01 +01:00
af96db3641
Remove bootboot declaration from MemoryManager now that it's MemoryMapIterator's job to walk the mmap 2022-12-04 15:56:25 +01:00
77e64d74a0
Remove unused header 2022-12-04 15:55:52 +01:00
0a296413e6
It's not worth it aborting when failing to determine CPU name 2022-12-04 15:55:12 +01:00
766804b3a0
Use get_blocks_from_size instead of +1 2022-12-04 15:52:56 +01:00
0d10c98477
SImplify init_physical_frame_allocator() even more 2022-12-04 15:50:21 +01:00
5f6c48bd12
Use a friendlier way of iterating over the memory map 2022-12-04 15:45:13 +01:00
5aa2d1fa18
Add a Bitmap class to provide common functionality and use that in the MemoryManager 2022-12-04 15:14:07 +01:00
ee76bdf84d
Add sanity check 2022-12-04 13:41:14 +01:00
bde3d55eb2
Remove escape from comment 2022-12-04 13:38:48 +01:00
f8120e01c0
Panic in delete as well 2022-12-04 12:58:37 +01:00
22019ac6b2
Print the error instead 2022-12-04 12:57:43 +01:00
96b32f5a93
Please use make<T> and destroy<T> instead of new and delete
Those are there only for common stuff (in the Luna library) that needs an environment-agnostic way of allocating memory.
new and delete are standard, thus we should use those.
2022-12-04 12:55:32 +01:00
adb2c2ab41
Add kernel-side new and delete 2022-12-04 12:52:49 +01:00
b8239698db
Add descriptions in CMakeLists 2022-12-04 12:47:08 +01:00
c7ab6bc2d3
Reorganize the luna/ directory so that headers aren't in the top level include path 2022-12-04 12:42:43 +01:00
bed29e71af
Replace some uses of check() with expect() 2022-12-04 12:25:16 +01:00
5d9c50eb12 Make build-debug.sh work 2022-12-04 10:27:25 +01:00
1d7b9260c3 Add config.h for version information 2022-12-03 17:25:25 +01:00
9c9cb6a05a oopsie 2022-11-30 17:29:18 +01:00
2bc99f2e6e Make log __attribute__(format), so the compiler can warn us of bad format strings 2022-11-30 17:28:46 +01:00
3f40ccd703 Indicate the log level in the serial console 2022-11-30 17:26:33 +01:00
985d45ddfb Switch to logging functions everywhere 2022-11-30 17:16:36 +01:00
d2856d8812 Provide meaningful error numbers 2022-11-30 17:13:59 +01:00
29dad5651d Move __check_failed to Log.cpp so it can be logged across all backends 2022-11-30 17:12:06 +01:00
fe47e0d5cb Clean init() up 2022-11-30 16:30:42 +01:00
9f5fb547f7 Add logging system :) 2022-11-30 13:29:28 +01:00
f1756e6f58 Add unit formatting 2022-11-30 12:42:11 +01:00
1ed51d11cb Do not push unused values 2022-11-23 19:37:25 +01:00
82893fa3a4 Introduce a kernel_yield function to use once a scheduler is implemented 2022-11-23 19:34:04 +01:00
7230eceb4d x86_64/Timer: Show explanatory message on static assertion fail 2022-11-23 18:58:39 +01:00
88f588a0c5 Make ARCH_TIMER_FREQ less frequent so it is more accurate (I hope) 2022-11-23 18:00:09 +01:00
43e26e583c Calculate the boot timestamp in UNIX time for further usage 2022-11-20 18:30:40 +01:00
ff952fa2e4 Confirm alignment when calculating an offset to split at 2022-11-20 18:04:29 +01:00
35b7194fb7 Move initialization into an init() function returning Result<void> so we can use TRY
And remove a lot of testing code as well.
2022-11-20 17:56:07 +01:00
a58b60d0cf Add a framebuffer text renderer 2022-11-20 17:55:22 +01:00
29defdf54d Add a debug function to dump heap usage 2022-11-20 16:33:54 +01:00
d54c882c63 Add new/delete-like functions but with Results 2022-11-20 15:48:08 +01:00
caf6d1563c Kernel: Add a heap memory allocator
This is the first time I've actually dropped liballoc in favor of writing my own implementation.
Usually, malloc() and such looked so complicated that I preferred to let a nice external library do the job.
But I've decided to try writing my own allocator, and now we have heap memory without any 3rd party code!
2022-11-20 15:15:26 +01:00
cb88630d86 Bugfix: Make alloc_at return the start of the virtual memory range instead of the end 2022-11-20 15:11:53 +01:00
af267772f0 Rename MemoryManager::map to map_frames_at
To make it clearer that this API is only intented for mapping contiguous frames of physical memory (for MMIO perhaps?)
2022-11-19 22:32:48 +01:00
1b41a3e9cf Introduce a few helpers to allocate/map/unmap several pages, which wrap around the MMU functionality 2022-11-19 22:28:45 +01:00
c886669d56 Break down operations to make protect_kernel_sections() more readable 2022-11-19 22:27:59 +01:00
d96cb73995 Rename physical "pages" to "frames"
AFAIK, this is the proper naming scheme. "Pages" are virtual, and "frames" physical.
2022-11-19 22:27:08 +01:00
847f2b4f4c Replace more usage of stdint.h types with Luna's Types.h 2022-11-19 22:25:03 +01:00
83bcac7a16 Kernel: Introduce a timer interface 2022-11-19 20:01:01 +01:00
047f445651 Kernel: Add helpers to validate memory addresses 2022-11-19 18:38:47 +01:00
424b069d55 Kernel: Start the call stack with a null RBP on x86_64 2022-11-19 18:38:32 +01:00
883a1da0d7 More indentation in CMakeLists.txt 2022-11-19 18:00:45 +01:00
70c6b78e35 Organize source tree 2022-11-19 17:59:49 +01:00
a44e2f41fe Cleanup kernel/CMakeLists.txt 2022-11-19 17:59:39 +01:00
102eabcb4b Do some more formatted logging 2022-11-19 17:52:24 +01:00
83e6bd1322 Make the build system more platform-agnostic 2022-11-19 17:46:53 +01:00
8cae20a82c Move __check_failed out of line so anyone can implement it 2022-11-19 17:20:10 +01:00
b8c136eeb4 Make a common header for attribute shorthands 2022-11-19 17:18:51 +01:00
648bd3fb61 Switch format.h to use Result 2022-11-19 16:13:25 +01:00
31673c0ac9 Introduce format attribute 2022-11-19 15:53:58 +01:00
3cdf224b90 Remove useless files now that functions are out of line 2022-11-19 15:46:46 +01:00
dadc3e570b Move a few functions out of line 2022-11-19 15:43:09 +01:00
4ebf244d3b Support printing some integers in output_integer 2022-11-19 13:15:13 +01:00
603ff46d8c Add a format implementation 2022-11-19 12:30:36 +01:00
762ca844d8 Add CPU::platform_string 2022-11-18 21:04:53 +01:00
109de54822 Provide stubbed handlers for many more x86 exceptions
I am now officially a big-boy OS developer, I read the Intel manuals for this!! (Not that the OSDev wiki doesn't have the information, but it was missing descriptions for some more obscure exceptions)
2022-11-18 20:51:25 +01:00
9d318d50aa Use TRY in MMU.cpp 2022-11-16 20:37:41 +01:00
2c9329928c Replace page_size (function) with ARCH_PAGE_SIZE (constant) 2022-11-16 20:37:32 +01:00
30ac95bcf8 Use usize/isize instead of (s)size_t
Since we're using Rust-style integer types already, why not go all in?
2022-11-16 20:30:34 +01:00
7fc5a6b753 Make kernel rodata and data not executable 2022-11-16 20:02:04 +01:00
7f15ba0ac5 Add some interrupt handling 2022-11-16 17:37:18 +01:00
df8666fd73 Remove unneeded label 2022-11-15 20:47:50 +01:00
bb46cd890b Add GDT and IDT setup and loading + NX if supported 2022-11-15 20:41:59 +01:00
c9feb11366 Introduce a check() method (like assert() but always on) 2022-11-15 19:36:50 +01:00
c319336e3d Add a CPU interface 2022-11-15 19:10:32 +01:00