Commit Graph

86 Commits

Author SHA1 Message Date
ce6ec3585c Kernel, libc: Add ENOSYS
This error is returned by the kernel/C Library when an attempt is made to use a system call that doesn't exist.
2022-10-08 14:18:25 +02:00
a086ec514b Remove the Superblock.h file which has never been used.
This file was included for a future Ext2 implementation. It should be included when said Ext2 implementation is actually started.
2022-10-08 13:28:30 +02:00
71e15e94af Kernel, libc and userspace: Add basic errno support.
Kernel: Add an errno.h header with definitions for each header,
and return those, negated, from syscalls when there is an error.
mmap() returns an invalid address with errno encoded, instead of
returning a negated errno; this address is encoded as ffffffffffffffEE
where EE is errno in hex.

libc: make syscall() return -1 and set errno on error, instead of
returning the raw return value of the system call. Also, add mmap()
and munmap() wrappers in sys/mman.h :).

userspace: make the memeater program show the value of errno
when allocating memory fails.

Things to improve: add perror() and strerror() to make the errno
experience even better! >.<
2022-10-08 12:06:09 +02:00
dc389da74e Implement an ELFImage struct
This struct allows us to keep track of what memory is used by the loaded executable. For some reason, freeing this memory when the task exits triggers a kernel page fault, so I'm not doing that right now.
2022-10-07 17:54:05 +02:00
594d79143e Kernel: enable -Wconversion 2022-10-06 17:13:34 +02:00
952d8fa294 Be more strict with warnings 2022-10-05 17:34:22 +02:00
8f310dd307 PMM: Map the page bitmap to kernel heap once the PMM and VMM are both initialized 2022-10-04 18:36:09 +02:00
dae2ff8d50 Add mmap and munmap syscalls, and thus, add malloc and free to libc!! (yet again, thanks to the wonderful liballoc) 2022-10-02 20:45:04 +02:00
1ecd24f5d6 Kernel: Add SSE support (enable SSE on boot and save context (user tasks only) on task switch) 2022-10-02 18:53:54 +02:00
8e6741ebd6 Rename SYS_version to SYS_getversion 2022-10-02 17:25:56 +02:00
ac6fdce737 Add 2 new syscalls (sys_version, sys_gettid) 2022-10-01 17:30:31 +02:00
87cb41e549 Separate the logging stack into toggleable backends, to disable console logging once boot finishes. 2022-10-01 15:35:11 +02:00
0e46ea8ada Finally, a text renderer that actually works. We can now see the kernel messages without a serial port :) 2022-10-01 14:27:45 +02:00
30411b4b78 Fix hackiness in converting a uint32_t to a Color, by providing a function to do so 2022-10-01 13:08:47 +02:00
66bee86a8b Scheduler: add a load_user_task function that directly loads a file from the initrd 2022-10-01 12:28:32 +02:00
6e6cf5b2b0 Add an ELF Loader!! 2022-10-01 12:15:56 +02:00
53d36be339 Add a much-needed get_blocks_from_size function 2022-10-01 12:13:38 +02:00
e769cb45a7 MemoryManager: add get_page_at and get_pages_at functions to map any physical memory at a fixed virtual address (inverse of get_mapping and get_mappings) 2022-10-01 12:12:50 +02:00
ef5994e389 Proper userspace program 2022-09-29 20:06:18 +02:00
522d74b65d Add is_user_address and is_kernel_address functions 2022-09-29 19:30:42 +02:00
f25014a8ed refine syscalls 2022-09-29 19:17:43 +02:00
46f459337c Interrupts: Remove ensure_handler and use a more reliable way of detecting if we are in a handler 2022-09-29 18:35:51 +02:00
07d6fe388d Fix naming 2022-09-25 21:43:28 +02:00
f1a7138568 User mode (with a few syscalls)
IT ACTUALLY WORKS NOW.

Why wasn't it working? Oh, because I was not setting already present page tables's permissions to user mode. Just a little bug. THAT I SPENT DAYS TRYING TO FIND

Anyways, it works now. Such a relief...
2022-09-25 20:35:05 +02:00
19dff40ee2 Scheduler: track total CPU time of tasks 2022-09-25 17:49:51 +02:00
3fd1b6773d Panic: Only dump stack trace if InitRD is initialized 2022-09-25 17:41:34 +02:00
a078a11dde Move PMM and VMM initialization into MemoryManager::init 2022-09-25 17:38:17 +02:00
4e62566c48 Add with_value_of and with_value to MSR 2022-09-25 17:28:38 +02:00
aee4e55fdd add a proper kernel panic 2022-09-25 16:56:00 +02:00
704a23d0ad Sanity checks 2022-09-24 23:09:39 +02:00
6bd3529f32 Port liballoc to get proper kmalloc/kcalloc/krealloc/kfree functions.
Yes, that's not completely-from-scratch.
But let's be honest, am I going to do everything from scratch? Probably not. I'm not making my own bootloader.
And making a proper smaller-than-4-KB allocator is not something I want to do.
Plus, liballoc works perfectly in this rewrite, seeing as the MM code actually works, instead of leaking all your poor memory
And liballoc_{lock, unlock} can be actually defined, since we have spinlocks here!
2022-09-24 22:40:59 +02:00
3891d0c52e Rename KernelMemoryManager to MemoryManager
Kind of a more catchy name, isn't it?
2022-09-24 21:45:13 +02:00
46b7dab847 Remove RangeAllocator and make a PMM namespace 2022-09-24 21:27:45 +02:00
198f4196c4 Add an MSR utility struct 2022-09-24 20:48:27 +02:00
7b8d30aacd Add a Device class to PCI and a PCITypes file for string names for PCI device types 2022-09-23 18:01:07 +02:00
8a93c53277 Add a Device class to PCI 2022-09-23 17:24:45 +02:00
c3e5251687 Some more userland and font failing 2022-09-23 16:41:43 +02:00
11dd165a8e Scheduler: add proper support for user tasks (still faults though) 2022-09-22 08:14:04 +02:00
543fe2885f Add support for user pages 2022-09-22 07:57:30 +02:00
ec01dc2927 Scheduler: Change fixed Task array for (highly inefficient) memory allocation, add userspace task support (which as memory is mapped kernel-only instantly crashes), and support for exiting a task (marking it as exited and reaping it later) 2022-09-21 21:06:00 +02:00
ee49caa6d3 Interrupts: ensure is_in_handler is true if we know we are in a handler 2022-09-21 21:03:49 +02:00
4401b31440 Remove ds from context, no need for it in x86_64, use ss instead 2022-09-21 21:03:24 +02:00
d54ed0dc8b Make ASSERT, PANIC and TODO show a backtrace and scheduler tid if initialized 2022-09-21 20:56:40 +02:00
af8e5aca64 Add basic PCI driver 2022-09-21 17:57:02 +02:00
49ddb47ad4 Reorganize structure 2022-09-21 17:56:53 +02:00
1c12cf016e Add a Scheduler.
Finally.

Just Round Robin with sleeping, but it's still awesome. I think this can finish v0.3, with a few adjustments.
2022-09-20 19:58:04 +02:00
e6c6a1677a Rename "SavedContext" to "Context"
Seemed like a more appropriate name.
2022-09-20 19:56:43 +02:00
d0d2d4381c Add a is_in_handler function to validate being in an interrupt handler 2022-09-20 17:16:07 +02:00
1c1aa96293 Add a moon_version function that returns the full version string 2022-09-20 16:34:24 +02:00
6967fa9117 Update config.h to use a .cpp file that will be recompiled when it changes 2022-09-20 16:30:34 +02:00