a92077d311
kernel+libc: Add all variants of utime
continuous-integration/drone/push Build is passing
2023-08-08 14:14:35 +02:00
1481a4736a
tmpfs: Update mtime on writes
continuous-integration/drone/push Build is passing
2023-08-08 13:36:25 +02:00
4195e7f206
kernel+libc+stat: Add support for file times
...
continuous-integration/drone/push Build is passing
The modification time is not updated though.
2023-08-08 13:33:40 +02:00
b63a8ff245
libluna: Move get_blocks_from_size to a new header and call it ceil_div instead
continuous-integration/drone/push Build is passing
2023-08-08 11:58:33 +02:00
917203ef11
kernel: Run the init function in a separate block to free everything before kernel_exit is called
continuous-integration/drone/push Build is passing
2023-08-08 10:44:18 +02:00
826be882a9
kernel: Interrupt syscalls before exiting because of a signal
...
Closes #40 .
2023-08-08 10:41:46 +02:00
7c254e5e15
kernel: Properly check memory bounds in strdup_from_user()
...
continuous-integration/drone/push Build is passing
Missed this one in 097353e779
.
2023-08-08 10:27:19 +02:00
097353e779
kernel: Properly check memory bounds while touching user memory
...
Before this patch, one byte of each page was being accessed without checking the page's permissions.
2023-08-07 22:49:00 +02:00
10c892d606
kernel: Allow null envp in execve()
...
As far as I know, this is not standard, but I'm doing this as a convenience for programs using exec() right after clearenv().
2023-08-07 22:48:21 +02:00
f45734c61d
kernel/ATA: Stop storing ATA::Drive in a separate shared pointer
continuous-integration/drone/push Build is passing
2023-08-07 19:22:57 +02:00
bc20e1a31b
kernel: Store FD_CLOEXEC in the file descriptor itself
...
continuous-integration/drone/push Build is passing
Closes #39 .
2023-08-03 17:47:18 +02:00
5aa042a5f2
kernel: Add constructors to SharedMemory
2023-08-03 10:31:58 +02:00
f150425222
kernel: Create a new shared memory object if the old one was lost
2023-08-03 10:31:29 +02:00
842b212685
kernel: Set a SharedMemory object's prot value
2023-08-03 10:30:43 +02:00
641b65da0f
kernel: Take devices into account in SharedMemory::free()
2023-08-03 09:33:10 +02:00
b5d146b492
kernel/mmap: Fix some parameters
2023-08-03 09:26:21 +02:00
b447c1a261
kernel: Set the shmem->inode field in query_shared_memory
2023-08-03 09:25:56 +02:00
f8e86b3b01
fix
2023-08-03 09:25:38 +02:00
d8f6af99b8
kernel: Let devices use shared memory
2023-08-03 09:25:23 +02:00
c5e24e478f
kernel+libc: Add truncate and ftruncate
continuous-integration/drone/push Build is passing
2023-08-03 08:47:37 +02:00
84c1ac4cee
kernel: Add msync
continuous-integration/drone/push Build is passing
2023-08-02 22:39:07 +02:00
2572695c8d
kernel: Support mapping shared memory using mmap()
2023-08-02 22:20:05 +02:00
9443551d71
kernel: Add shared memory
2023-08-02 22:20:05 +02:00
b4527786d4
kernel/MMU: Don't copy pages on clone and allow manipulating other page directories
2023-08-02 22:17:32 +02:00
4794d0dfef
kernel: Add a keyboard device for graphical session
2023-08-02 17:20:13 +02:00
9c1e275f34
kernel: Make /dev/mouse read-write only for root
2023-08-02 17:19:37 +02:00
df4227eab8
kernel: Make the poll() system call actually work
2023-08-02 17:18:38 +02:00
f8cb6e03df
kernel: Allow turning off the TTY by setting it to graphical mode
continuous-integration/drone/push Build is passing
2023-08-02 15:16:10 +02:00
207d901de8
kernel+libc: Add the poll() syscall
continuous-integration/drone/push Build is passing
2023-08-02 14:48:20 +02:00
df77fc8de8
libluna: Remove make_array() and destroy_array()
...
Placement new on arrays is a bit unreliable and could cause out-of-bounds data accesses.
2023-08-02 14:47:58 +02:00
e8f3dd4cf9
kernel: Add a PS/2 mouse driver
2023-08-02 11:55:45 +02:00
dc35c42371
kernel/VFS: Rework the metadata system so that there is a single metadata struct
continuous-integration/drone/push Build is passing
2023-08-01 17:20:28 +02:00
4c87d72b44
kernel/binfmt: Add documentation + support script interpreters being scripts themselves
continuous-integration/drone/push Build is passing
2023-07-31 20:41:18 +02:00
3638d3da46
kernel: Add binary format for shebang scripts
2023-07-30 18:46:19 +02:00
1c76675e40
kernel: Add a framework to add more executable formats, possibly from userspace
...
This lets us implement shebangs and possibly an interface similar to Linux's binfmt_misc.
2023-07-30 18:25:44 +02:00
187f0ff83e
kernel: Rename Inode::blocking() to Inode::will_block_if_read()
continuous-integration/drone/pr Build is passing
2023-07-30 11:41:53 +02:00
0c873923e8
kernel: Make OpenFileDescription shareable
continuous-integration/drone/pr Build is passing
2023-07-30 11:33:46 +02:00
bb3127c212
kernel: Implement listen(), connect() and accept()
2023-07-30 11:33:06 +02:00
7a7ae086f5
kernel: Use a did_close callback for UnixSockets
2023-07-30 11:33:06 +02:00
fb08594a18
kernel: Separate FileDescriptors and OpenFileDescription
...
Also, add a did_close() callback for OpenFileDescriptions losing all their references.
2023-07-30 11:33:06 +02:00
a12b018b03
kernel+libc: Add basic Unix sockets (creation and binding)
2023-07-30 11:33:06 +02:00
c4e30c3029
kernel: Add functionality to allow external inodes (such as sockets) to acquire an inode number from a file system
...
This is only implemented in tmpfs.
2023-07-30 11:33:06 +02:00
c1d08b904e
kernel+libluna: Add Buffer::dequeue_data()
2023-07-30 11:33:05 +02:00
200bb6c240
kernel+libc+libos: Add inode type for sockets
2023-07-30 11:33:05 +02:00
4ed7ec5e93
libluna: Store SharedPtr's ref count in the object itself
continuous-integration/drone/push Build is passing
2023-07-30 11:32:46 +02:00
28cc4b2306
kernel: Add default action for SIGWINCH
continuous-integration/drone/push Build is passing
2023-07-27 14:00:30 +02:00
11df5a2ec3
kernel: Use pid_t internally for process IDs
...
continuous-integration/drone/push Build is passing
This removes a bunch of casts between pid_t and u64, and makes more sense since pid_t is literally the data type for process IDs.
2023-07-26 21:32:00 +02:00
5aad7d3154
kernel/x86_64: Fail on invalid interrupts instead of calling FIXME_UNHANDLED_INTERRUPT
...
continuous-integration/drone/push Build is passing
A FIXME is something that should be changed later,
this is a check for something that should never happen.
2023-07-25 18:23:33 +02:00
28dd8194af
kernel: Include waited-for grandchildren in RUSAGE_CHILDREN's times
continuous-integration/drone/push Build is passing
2023-07-25 17:50:15 +02:00
b88da4811f
kernel: Remove debug message in readlink
continuous-integration/drone/push Build is passing
2023-07-25 17:30:56 +02:00
105ed79f8f
kernel: Reenable userspace stack tracing, but hidden behind a config flag
...
continuous-integration/drone/push Build is passing
Sometimes this is needed for userspace program debugging (such as ports),
but sometimes it can crash, so we leave it off by default.
2023-07-25 17:02:09 +02:00
ad3f3bf4db
kernel: Log the release name and build date in the boot log
2023-07-24 11:48:01 +02:00
358493a7bc
kernel: Add a system for release names in uname(), call alpha releases "Mercury"
continuous-integration/drone/push Build is passing
2023-07-22 12:21:01 +02:00
36a74fd8d6
kernel/x86_64: Provide an alternate kernel stack for exceptions
...
continuous-integration/drone/push Build is passing
This avoids stack-related triple faults, hopefully.
Closes #33 .
2023-07-21 15:14:52 +02:00
310b325af8
kernel: Avoid some more -Wconversion errors in TextConsole
2023-07-21 15:14:05 +02:00
cd6bf745a7
tests+kernel+init: Run tests automatically in a headless way
continuous-integration/drone/push Build is failing
2023-07-21 14:09:37 +02:00
bcfee628cb
kernel: Remove outdated FIXME
continuous-integration/drone/push Build is passing
2023-07-15 13:19:47 +02:00
0d41e1f7b6
kernel/ext2: Change outdated FIXME
continuous-integration/drone/push Build is passing
2023-07-15 13:17:58 +02:00
f9003d7a58
kernel: Mask away unsafe bits in rflags when restoring state after a signal
continuous-integration/drone/push Build is passing
2023-07-15 11:54:48 +02:00
89786d8be2
kernel: Save/restore the SSE/FPU state when executing signal handlers
2023-07-15 11:53:50 +02:00
de6fe7f7c2
kernel+libc+sh: Make the TTY device actually follow termios rules
...
continuous-integration/drone/push Build is passing
Like, so much more termios compatibility!
2023-07-13 20:33:20 +02:00
efd5bae7a5
kernel: Implement querying the terminal window size
continuous-integration/drone/push Build is failing
2023-07-12 22:09:28 +02:00
546d900454
libc+apps: Start implementing POSIX-compliant termios.h wrappers around tty ioctls
continuous-integration/drone/push Build is passing
2023-07-12 19:23:06 +02:00
5f698b4774
kernel: Don't create a new kernel stack on exec()
...
continuous-integration/drone/push Build is passing
The old one was not getting freed, creating a memory leak every exec(),
which can get huge over time.
Plus, there was no need for a new stack.
And we couldn't just free the old one, since sys_execve() runs on the old stack...
2023-07-12 16:06:56 +02:00
f629e17ff4
kernel/x86_64: Only show kernel addresses in backtraces
...
This avoids walking off into userspace memory where we don't know what could happen.
2023-07-12 16:04:45 +02:00
81e1fdf81e
kernel+libc+login+sh+su: Implement foreground and background process groups in the default console
...
continuous-integration/drone/push Build is passing
Also, the console sends SIGINT to the foreground process group when ^C is pressed!
2023-07-12 13:49:37 +02:00
9f45026cc2
kernel+sh: Implement interruptible syscalls
2023-07-12 13:48:43 +02:00
71ff763dd9
kernel+libc: Add the SIGTTIN and SIGTTOU signals
2023-07-12 13:45:36 +02:00
b64093dee5
kernel+libc: Implement getpgid()
2023-07-12 13:44:25 +02:00
d27ffce5db
kernel: Move the signal handling logic to after a syscall sets its return value
...
When a signal was caught after a syscall, it was doing so without preserving the return value of the syscall.
2023-07-12 13:34:30 +02:00
69f9701097
kernel+libc: Implement isatty()
continuous-integration/drone/push Build is failing
2023-07-11 12:05:09 +02:00
7328cfe734
kernel: Add basic process groups
continuous-integration/drone/push Build is passing
2023-07-11 11:51:07 +02:00
86d14e0d0e
kernel+libc: Add the SA_NODEFER and SA_RESETHAND flags for sigaction()
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-07-10 21:54:04 +02:00
fe9827bbeb
kernel: Fix fallthrough in switch statement
continuous-integration/drone/pr Build is passing
2023-07-10 21:09:12 +02:00
8066e8f1d8
kernel+libc: Implement sigprocmask() and friends
continuous-integration/drone/pr Build is failing
2023-07-10 21:01:59 +02:00
015419b8f5
kernel: Generate signals when children exit / when faults occur
...
Userspace can now catch segfaults!
2023-07-10 20:49:22 +02:00
60d68b74e1
kernel: Define a good set of default signals
...
Most of these have POSIX-defined numbers.
2023-07-10 20:30:37 +02:00
cde467ee46
kernel: Support returning termination signals from waitpid
continuous-integration/drone/pr Build is passing
2023-07-10 20:16:06 +02:00
fc3fdc2b87
kernel: Add default actions for signals
2023-07-10 19:59:01 +02:00
bdcb690a7a
kernel: Avoid processing unregistered signals for init
2023-07-10 19:48:46 +02:00
15d6aae701
kernel+libc: Implement basic signals
2023-07-10 19:46:57 +02:00
56f3d26969
kernel+libluna: Fix the CRC32 algorithm and use it to verify the GPT header
continuous-integration/drone/push Build is passing
2023-07-10 14:54:55 +02:00
16b0531d42
kernel+apps+base+tools: Use Ext2 for the root partition file system
...
continuous-integration/drone/push Build is passing
init is now split into two parts: preinit, which lives in the initrd and prepares the root file system for init,
and the actual /usr/bin/init, which lives in the root partition and starts services and reaps zombies.
The kernel now looks for /bin/preinit instead of /bin/init as the executable for the init process.
All configuration files in initrd/etc have been moved to base/etc. (The plan is to have only moon and preinit in the initrd.)
Since the current Ext2 implementation is read-only (and it's on a CDROM so it would be read-only anyways),
/home/selene is a tmpfs (as well as /tmp), to allow for a writable home directory.
The system is slower now, but that's to expect since the Ext2 code doesn't use caching and the ATA code still uses PIO.
2023-07-10 13:05:06 +02:00
40413eee18
kernel: Panic when PID 1 exits/crashes
2023-07-10 13:04:47 +02:00
e3552d9df0
kernel: Log hostname changes
2023-07-10 13:04:40 +02:00
a1b92fcc3f
kernel: Add the MOUNT_DEBUG flag
2023-07-10 13:04:34 +02:00
0b488c1232
kernel: Actually use config.cmake
...
Looks like file(EXISTS) needs a full path.
2023-07-10 13:04:26 +02:00
b920ffee42
kernel: Don't use an active directory for the idle thread
...
Just take the currently used directory.
2023-07-10 13:04:18 +02:00
503dc72686
kernel: Set kernel threads' initial active directories to avoid taking the first directory they use
...
This ends up being init's directory, which is fine when init's directory doesn't change...
but a little less fine when the init process calls exec()...
which is what it does in the new configuration I'm testing...
2023-07-10 13:04:00 +02:00
7908c5a63e
kernel/ATA: Do not discard the controller if at least one channel initialized properly
...
This was causing problems in VirtualBox.
2023-07-10 13:01:43 +02:00
ae0cd155c3
kernel: Fix AddressSpace's move assignment operator
continuous-integration/drone/push Build is passing
2023-07-09 20:43:03 +02:00
c599251d2a
kernel: Rename UserVM to AddressSpace
...
continuous-integration/drone/push Build is passing
This is a more appropriate name now that it does more stuff than allocate virtual memory.
To be fair, the name was a bit awkward anyway. Should have been UserVMAllocator I guess.
2023-07-09 20:38:04 +02:00
5e564e9ae3
kernel: Move Thread::self_directory to UserVM
...
Since this is only used by user threads, UserVM is a convenient/related place to store the PageDirectory in a RAII manner.
2023-07-09 20:32:42 +02:00
af26dce038
kernel: Zero physical frames instead of virtual pages
...
continuous-integration/drone/push Build is passing
The memset() happens a bit earlier, and we don't have to remap the
mapped virtual memory.
2023-07-04 00:49:26 +02:00
3b1219ecf2
kernel/ext2: Make the inner extended superblock struct packed as well
continuous-integration/drone/push Build is passing
2023-07-02 19:50:27 +02:00
bd757d204e
kernel+libos+libluna: Avoid copying and reallocation when creating Strings
...
continuous-integration/drone/push Build is passing
This is done by reusing the existing buffers in Vector and Buffer instances.
2023-07-02 19:30:25 +02:00
d363d5e915
kernel/ext2: Make sure we don't crash when accessing the last inode
continuous-integration/drone/push Build is passing
2023-07-02 17:30:14 +02:00
dd914b16d1
kernel: Stop showing memory stats at boot
...
continuous-integration/drone/push Build is passing
No userspace interface yet, but this can be shown using Shift+Ctrl+M.
2023-07-02 16:02:38 +02:00
e9e7b22323
kernel: Separate a thread's page directory into two
...
continuous-integration/drone/pr Build is passing
The self directory, and the active directory. The active directory is the one the thread is currently using,
and the self directory is the one the thread owns.
This lets us keep track of both, which fixes ext2 executables crashing the system.
2023-06-25 20:35:40 +02:00
5f4103251a
kernel: Preserve the new page directory while exec() is running
2023-06-25 20:35:40 +02:00