ce10fb5743
fcntl(F_DUPFD): Allocate any file descriptor greater than or equal to arg
2022-10-17 17:01:22 +02:00
9b39d618de
Kernel, libc: Implement spawn()
...
This function is a Luna alternative to fork() and exec().
Why? Simply because I can't figure out for the life of me how to implement a working fork().
So meanwhile, we have spawn() as a replacement. exec() still exists, though.
2022-10-16 18:48:35 +02:00
a1146a5ce2
Panic: show panic message on screen
2022-10-16 18:23:33 +02:00
d2e2883a79
Kernel: Make mkdir() accessible to userspace
2022-10-16 17:22:12 +02:00
1624f0360d
exec: More logging
2022-10-15 17:47:57 +02:00
68403dc029
Kernel: Make AddressSpaces reference-counted
2022-10-15 17:40:33 +02:00
62a2bcf2ff
Kernel: Add a clock() system call
2022-10-15 13:17:26 +02:00
3a9dddaa57
Kernel, libc: Remove the rand() system call
...
That's why we now have a VFS and a /dev pseudo-filesystem. To provide that kind of things.
Remember, everything is a file!!
The new way to ask the kernel for random numbers is to read from /dev/random.
2022-10-15 13:04:48 +02:00
613f8170b6
Kernel, libc: Implement mprotect() and use proper PROT_* values
2022-10-15 12:57:14 +02:00
62d631f1b4
Kernel: Rename assert.h to kassert.h so IDEs pickup the kernel header instead of the userspace one
2022-10-15 12:56:48 +02:00
1e86acd4c0
libc: Implement fcntl(F_DUPFD) and dup()
2022-10-15 11:16:34 +02:00
5c61252061
Kernel: Add a new fcntl() system call
2022-10-15 10:56:06 +02:00
1c3377fc98
Prepare for cloning address spaces, not there yet
2022-10-14 18:17:57 +02:00
e43777bd31
Apparently, it just works now.
2022-10-14 18:00:33 +02:00
5abd8814e3
Kernel: Continue moving utilities to a separate subdirectory
2022-10-14 17:33:06 +02:00
26211bd49f
It (almost) works now
...
The only thing doing weird stuff is exec(), so that's commented out and throws ENOSYS right now.
But we have two user tasks running in parallel, isolated from each other!
2022-10-14 16:46:00 +02:00
0c7c249935
exec is still doing some weird stuff, totally corrupting the page tables
2022-10-13 22:20:24 +02:00
5d41b4b113
Almost there...
...
exec() is not working yet. But the rest are!!
2022-10-13 22:13:04 +02:00
24272c57ef
Almost there!
2022-10-13 21:55:51 +02:00
83982a24e2
add a comment
2022-10-13 21:21:02 +02:00
ee712432bd
Some more multiple address space stuff
...
This page-faults. This is because the memory where the ELF should be is all zeroes, which the CPU tries to interpret.
2022-10-13 21:14:39 +02:00
522aa2f812
mmap, munmap: Add more checks
2022-10-13 18:50:12 +02:00
83e6b8cd21
VMM: Fix naming convention
2022-10-13 18:42:53 +02:00
b0e1b8a2b2
Missed some empty lines
2022-10-12 20:51:24 +02:00
2dd3a23092
Kernel: remove warnings when a standard IO syscall returns an error
...
That will probably happen a lot. We want userspace to tell us IF THE ERROR IS RELEVANT.
So, these unnecessary warnings are just noise.
Userspace may also use these functions to check for file descriptors.
For example, libc does this at program initialization, it checks whether fd 0 and 1 exist (by calling lseek() and seeing if it fails with errno=EBADF).
2022-10-12 20:50:21 +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
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
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
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
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
4e3ef9593d
Scheduler: Move ELF image freeing to ELFLoader
2022-10-12 17:08:17 +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
854f585e1a
Kernel: Add a seek() system call
...
Now, time for libc support!!
2022-10-12 15:28:52 +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
97eacc027e
Kernel: Use PAGE_SIZE in more places
2022-10-12 13:05:57 +02:00
e90b90c556
Kernel, libc: Round up to nearest page-aligned size instead of down
2022-10-12 12:15:12 +02:00
1e16a78106
libc: Document functions in sys/mman.h
2022-10-12 12:06:45 +02:00
25ab31c7ce
Remove unnecessary comments
2022-10-11 21:32:28 +02:00
d3ac590e24
Kernel: Remove the sys_getversion() syscall
...
User programs can now acquire this information by reading /dev/version.
2022-10-11 21:31:28 +02:00
12cf37d0a7
Kernel/syscalls: Modify sys_write to accept a file descriptor and write to it
...
Previously, sys_write only wrote to the tty. Now, it uses the VFS interface, as it should.
2022-10-11 21:06:12 +02:00
0131193379
ELFLoader, Scheduler: Transition to use VFS
...
We should start to drop the old InitRD API, which only allows for files to be loaded from the initrd, and which forces pathnames to be relative (bin/init)
With VFS, we can load any kind of file from any kind of filesystem, and using paths that make sense (/bin/init)
2022-10-11 19:33:48 +02:00
6088031c49
stdio: log stuff more
2022-10-11 17:19:03 +02:00
81815a0bdd
Refactor sys/stdio.cpp
2022-10-11 17:10:44 +02:00