de6041fede
libc: Add fdopen()
2022-10-12 20:19:13 +02:00
52944ba5d8
Kernel/VMM: Add support for larger pages to getFlags()
2022-10-12 20:05:27 +02:00
69a9f7f06a
Kernel: Move VMM from a class to a namespace
...
Also, rename the ugly Paging::VirtualMemoryManager name to just 'VMM'. Which is now used instead of kernelVMM.
2022-10-12 20:02:25 +02:00
5f8376409d
Kernel, libc: Implement EFAULT
2022-10-12 19:25:35 +02:00
e37ff67da2
Make exec return an error if the loaded executable would use more memory than is currently available
2022-10-12 19:22:08 +02:00
9cddf9485d
ELFLoader: Make check_elf_image return how much memory the executable will use on success
2022-10-12 19:20:14 +02:00
4091799701
Kernel, libc: Add ENOEXEC (Exec format error)
2022-10-12 19:15:44 +02:00
ea886f58a0
Update README.md
2022-10-12 19:07:28 +02:00
8a7ddfca80
exec: Use check_elf_image()
...
This allows exec to recover if an error should occur when loading the executable.
Thus, the calling process will be notified instead of killed.
2022-10-12 18:43:48 +02:00
1a54342454
Sanity check
2022-10-12 18:38:18 +02:00
d4c4c0177d
compilation fix :)
2022-10-12 18:37:32 +02:00
3ac9fed23a
ELFLoader: Add check_elf_image() and check_elf_image_from_filesystem()
...
These two functions validate an image, without actually loading it. Very useful for exec!
2022-10-12 18:37:00 +02:00
261fc73146
ELFLoader: Read the ELF file header by header using the VFS
...
Instead of just allocating one big redundant blob of memory and reading into it, then having to free it...
2022-10-12 18:23:52 +02:00
7a2e313a20
init: demo execv()
2022-10-12 18:04:27 +02:00
e9df5fd663
exec: Copy pathname into kernel memory, since the user memory where it resides is going to be freed
2022-10-12 18:04:20 +02:00
bcbf43e55c
Kernel/std: Add strdup()
2022-10-12 18:03:54 +02:00
531afc3d6f
libc: Add support for the new exec() system call
...
execv() is a temporary wrapper that ignores the second parameter, while execve() and execvp() still error out.
2022-10-12 17:45:58 +02:00
f8b3567042
Kernel: Add an exec() syscall
...
Very bare-bones for now. Doesn't support arguments or environment (we don't have that stuff right now), and the executable is not a valid ELF, it terminates the task.
But it's a start!
2022-10-12 17:42:01 +02:00
34c35163e4
libc: use the normal names that everybody uses for stdout and stderr
2022-10-12 17:15:57 +02:00
dfdc3b2d11
libc: close fds 0 and 1 before opening stdout and stderr
2022-10-12 17:14:49 +02:00
25a460e3c6
Scheduler: clear user tasks' registers
2022-10-12 17:12:06 +02:00
136c0b3ae9
Scheduler: add a reset_task function
...
This can be used later to implement execve()
2022-10-12 17:08:45 +02:00
4e3ef9593d
Scheduler: Move ELF image freeing to ELFLoader
2022-10-12 17:08:17 +02:00
a6f0a7056f
Scheduler: Set the user_task field in a Task at creation time
...
We were previously looking at its segment registers to see if they were user-like, but this method is bad.
What is the task was executing a system call?
So now, we store that value at creation time.
2022-10-12 17:07:39 +02:00
edda41a7bb
libc: Implement fseek(), ftell() and rewind()
...
All three use the new syscall seek() (with its lseek() wrapper in unistd.h)!!
2022-10-12 15:56:03 +02:00
4a5db1dca7
libc: Add lseek()
2022-10-12 15:37:29 +02:00
928ade123c
libc: Add support for the new seek() system call
2022-10-12 15:32:09 +02:00
e40304f2f1
libc: Add off_t to sys/types.h
2022-10-12 15:30:41 +02:00
854f585e1a
Kernel: Add a seek() system call
...
Now, time for libc support!!
2022-10-12 15:28:52 +02:00
97b7572933
VFS: Implement a new type of Node, VFS_DEVICE
...
This is used to differentiate normal files from devices.
2022-10-12 15:22:34 +02:00
0f5910add7
Kernel/Utilities: Add new round_{up,down}_to_nearest_page functions
2022-10-12 14:51:04 +02:00
baa71b09cc
Kernel: Build with -fstack-protector-strong instead of -fstack-protector-all
...
We lose a LITTLE bit of security, while allowing the compiler to optimize MUCH more.
Very simple functions, like most functions in misc/utils.cpp, were being made very big when some of them can just be "jmp thingy" or "and rax, something" and waste much less space.
This change makes more sense, I think.
2022-10-12 14:50:31 +02:00
4768d5fc12
ELFLoader: Consider the offset when calculating how many pages to map
...
If a section needs to be mapped at 0x50f50 and its size is 0x200, then that address space exceeds one page.
But since 0x200 is less than one page, we only map one page.
If we count the offset, 0xf50 + 0x200 need two pages. So we can map the right amount of memory.
2022-10-12 14:40:06 +02:00
bbd9f1d187
VMM: Add FIXME
2022-10-12 14:35:34 +02:00
15f340dbbe
VMM: Do not map recursively
2022-10-12 14:34:12 +02:00
8daffa876c
Make some shell scripts executable
2022-10-12 14:31:50 +02:00
28469497e9
Change build system to accept arbitrary CFLAGS during the build process
...
For the kernel, at least.
2022-10-12 14:31:41 +02:00
d3cb642e5f
Scheduler: add FIXME
2022-10-12 14:30:57 +02:00
0ee9bd7290
Scheduler: free a task's ELF image.
...
Now that we have support for larger pages, this works!!
2022-10-12 14:30:46 +02:00
eaea4603c6
MemoryManager: Fix logging when built with debug logging
...
That is to say, -DMM_DEBUG
2022-10-12 14:29:30 +02:00
4021cb3ac0
KernelHeap: do not crash the entire system
...
Previously, calling free_virtual_page(s) would cause an assertion fail if the address was not in the kernel heap range.
Now, we just return.
2022-10-12 14:28:48 +02:00
ad9c7af0bf
VMM: add FIXME
2022-10-12 14:27:47 +02:00
950f4ef608
VMM: Add support for larger pages
...
getPhysical() now stops at a larger page, unmap() can unmap a larger page, but map() just transforms it into a normal page.
getFlags() larger pages support is still pending.
At least now we don't page fault because we're trying to free a larger page.
2022-10-12 14:27:26 +02:00
525d567af6
VMM: When unmapping a page, invalidate the TLB for that page
2022-10-12 14:24:34 +02:00
c9ebe89899
Kernel/KernelHeap: Add MODULE #define
2022-10-12 14:04:41 +02:00
cf160d1260
Scheduler: Use misc/utils.h instead of doing everything manually.
...
That way the code is cleaner + we have one single point of failure.
2022-10-12 13:18:35 +02:00
66add380cf
Kernel/Utilities: add a new get_top_of_stack convenience function
2022-10-12 13:17:58 +02:00
cf3f61e373
Kernel: More GDT refactoring
2022-10-12 13:12:46 +02:00
c1f9d3323f
Kernel: Refactor TSS loading to make it cleaner >.<
2022-10-12 13:07:28 +02:00
97eacc027e
Kernel: Use PAGE_SIZE in more places
2022-10-12 13:05:57 +02:00