Andreas Kling
e561ab1b0b
Kernel+LibC: Add a simple create_thread() syscall.
...
It takes two parameters, a function pointer for the entry function,
and a void* argument to be passed to that function on the new thread.
2019-03-23 22:59:08 +01:00
Andreas Kling
60d25f0f4a
Kernel: Introduce threads, and refactor everything in support of it.
...
The scheduler now operates on threads, rather than on processes.
Each process has a main thread, and can have any number of additional
threads. The process exits when the main thread exits.
This patch doesn't actually spawn any additional threads, it merely
does all the plumbing needed to make it possible. :^)
2019-03-23 22:03:17 +01:00
Andreas Kling
367bb9e4eb
Kernel: Remove ioctl for getting a socket peer's PID.
...
Now that everything is nice and mature, the WindowServer can just use the
client PID it receives in the Greeting message, and we can get rid of this
hacky ioctl. :^)
2019-03-20 17:14:48 +01:00
Andreas Kling
bc1da7f1fd
Kernel: Snooze the NetworkTask until there are incoming packets to process.
...
This is accomplished using a new Alarm class and a BlockedSnoozing state.
Basically, you call Process::snooze_until(some_alarm) and then the scheduler
won't wake up the process until some_alarm.is_ringing() returns true.
2019-03-20 17:09:46 +01:00
Andreas Kling
e48cbf3c8c
Kernel: connect() should fail with EISCONN for already-connected sockets.
...
Also make sure to reset the socket role if Socket::connect() fails.
2019-03-20 02:38:36 +01:00
Andreas Kling
4aa0ab4e08
Kernel: Fix race between accept() and connect().
...
We had a bug where an accepted socket would appear to be EOF/disconnected
on the accepting side until the connecting side had called attach_fd().
Fix this by adding a new SocketRole::Connecting state.
2019-03-20 02:33:51 +01:00
Andreas Kling
69ffaa366d
Kernel: Handle unaligned ELF segments gracefully in the executable loader.
2019-03-14 14:51:43 +01:00
Andreas Kling
66d55f8e0c
IPv4: More work on the TCP implementation.
...
I can now establish a connection to my little test server on the host.
2019-03-14 00:20:44 +01:00
Andreas Kling
032d9d7065
IPv4: More hacking on bringing up TCP support.
...
This was a bit more complicated than I expected, but it's moving forward.
2019-03-13 23:14:30 +01:00
Andreas Kling
19a51132f5
Kernel: recvfrom() should treat the address arguments as outparams.
2019-03-13 14:47:21 +01:00
Andreas Kling
562663df7c
Add support for socket send/receive timeouts.
...
Only the receive timeout is hooked up yet. You can change the timeout by
calling setsockopt(..., SOL_SOCKET, SO_RCVTIMEO, ...).
Use this mechanism to make /bin/ping report timeouts.
2019-03-13 13:15:05 +01:00
Andreas Kling
ce7c302933
Kernel: Oops, gettimeofday()'s tv_usec should be micro, not milliseconds.
2019-03-13 03:25:18 +01:00
Andreas Kling
a7d5e9781a
Kernel+LibC+Userland: Yet more networking bringup hacking.
...
All ICMP sockets now receive all ICMP packets. All this buffering is gonna
need some limits and such.
2019-03-12 17:27:07 +01:00
Andreas Kling
a017a77442
Kernel+LibC+Userland: Start working on an IPv4 socket backend.
...
The first userland networking program will be "ping" :^)
2019-03-12 15:51:42 +01:00
Andreas Kling
c6a2012fe9
Kernel: Collect IPv4 stuff in IPv4.h and ARP stuff in ARP.h.
2019-03-12 12:49:01 +01:00
Andreas Kling
a36eaeb18c
Kernel: Remove accidentally committed debugging code.
2019-03-11 01:57:34 +01:00
Andreas Kling
1678ac69ef
Kernel: More work on Ethernet support.
2019-03-10 23:40:09 +01:00
Andreas Kling
97664fad60
Kernel: A bunch of hacking towards initial Ethernet support.
2019-03-10 20:59:23 +01:00
Andreas Kling
eda0866992
Add a C++ helper class for working with shared buffers.
...
This is a bit more comfortable than passing the shared buffer ID manually
everywhere and keeping track of size etc.
2019-03-08 12:24:05 +01:00
Andreas Kling
e56fe71dbc
Kernel: And some more KResult/KResultOr<T> porting work.
2019-03-06 22:30:13 +01:00
Andreas Kling
028afabf6b
Kernel: Port more code to KResult and KResultOr<T>.
2019-03-06 22:14:31 +01:00
Andreas Kling
1cc32ebc7e
Kernel: Remove "requested wakeups" feature.
...
I only needed this to support the WindowServer living inside the kernel.
Now that it's been migrated to userspace, this can go. :^)
2019-03-05 13:34:36 +01:00
Andreas Kling
91031346e5
Kernel: More signal handling improvements.
...
Finally fixed the weird flaky crashing when resizing Terminal windows.
It was because we were dispatching a signal to "current" from the scheduler.
Yet another thing I dislike about even having a "current" process while
we're in the scheduler. Not sure yet how to fix this.
Let the signal handler's kernel stack be a kmalloc() allocation for now.
Once we can do allocation of consecutive physical pages in the supervisor
memory region, we can use that for all types of kernel stacks.
2019-03-05 12:52:35 +01:00
Andreas Kling
9e1fcb74a2
Kernel: Returning from a signal handler reset the signal mask correctly.
...
We were setting the handled signal number as the new signal mask, oops.
2019-03-05 11:00:26 +01:00
Andreas Kling
251293f2e1
Kernel: Block a signal from being dispatched again until handler returns.
...
We don't handle nesting yet, but this is a step in the right direction.
2019-03-05 10:34:08 +01:00
Andreas Kling
67fc42f64e
Kernel: SIGCONT should unblock a blocked process.
...
Otherwise we might stay in BlockedSignal state forever. Unblocking just
means that the current syscall may fail with EINTR.
2019-03-04 11:25:24 +01:00
Andreas Kling
725b57fe1f
Kernel: Try to do the right thing by default for unhandled signals.
2019-03-03 12:13:41 +01:00
Andreas Kling
2c5a378ccc
Kernel+Userland: Add symlink() syscall and add "-s" flag to /bin/ln.
...
It's now possible to create symbolic links! :^)
This exposed an issue in Ext2FS where we'd write uninitialized data past
the end of an inode's content. Fix this by zeroing out the tail end of
the last block in a file.
2019-03-02 01:52:24 +01:00
Andreas Kling
37f6844c6c
Kernel: Port stat() to KResult/KResultOr<T>.
2019-03-02 00:11:27 +01:00
Andreas Kling
f75eb9af16
Kernel: Support chdir() to a directory that's executable but not readable.
...
Also the superuser should be allowed to resolve any possible path without
getting tripped up by EACCES.
2019-03-01 23:54:07 +01:00
Andreas Kling
274b0260f7
Kernel: Don't send SIGCHLD to parent process if he has SA_NOCLDWAIT set.
...
Just transfer ownership of the dead process to the colonel and let the
scheduler reap it on next iteration.
2019-03-01 15:52:05 +01:00
Andreas Kling
1b16a29044
Kernel+Userland: Implement fchmod() syscall and use it to improve /bin/cp.
...
/bin/cp will now copy the permission bits from source to destination. :^)
2019-03-01 10:39:19 +01:00
Andreas Kling
e427b514dc
Kernel: Implement basic SIGSTOP and SIGCONT support.
2019-02-28 12:27:26 +01:00
Andreas Kling
c09ab7cc40
Kernel: Only allow sending signals to process you own.
2019-02-28 11:46:38 +01:00
Andreas Kling
258f4671ea
Kernel: kill() syscall should support sending a signal to yourself.
2019-02-28 09:44:48 +01:00
Andreas Kling
60d0a48be5
Kernel: Use KResult in link().
2019-02-27 15:31:26 +01:00
Andreas Kling
5b27f11b97
Kernel: Use KResult in unlink() and rmdir().
2019-02-27 14:11:25 +01:00
Andreas Kling
1d2529b4a1
Add chown() syscall and a simple /bin/chown program.
2019-02-27 12:32:53 +01:00
Andreas Kling
e421c10735
More compat work towards porting vim.
...
It now builds and runs in the small-featureset configuration. :^)
2019-02-27 00:02:01 +01:00
Andreas Kling
a356746d04
Compat work towards porting vim.
2019-02-26 15:57:59 +01:00
Andreas Kling
e0c1541847
Compat work towards making bash-5.0 build with less patches.
...
Hacked implementations of sigsetjmp() and siglongjmp(). I didn't know about
these APIs until just now, but I hope I got them right.
2019-02-26 14:05:28 +01:00
Andreas Kling
cccc8d8aeb
More compat work.
...
Move syscall to int 0x82 since using int 0x80 was kinda prone to fork bombs
when building things on Linux. :^)
2019-02-26 12:57:02 +01:00
Andreas Kling
9624b54703
More moving towards using signed types.
...
I'm still feeling this out, but I am starting to like the general idea.
2019-02-25 22:06:55 +01:00
Andreas Kling
beda478821
Kernel: Make syscalls that take a buffer size use ssize_t instead of size_t.
...
Dealing with the unsigned overflow propagation here just seems unreasonably
error prone. Let's limit ourselves to 2GB buffer sizes instead.
2019-02-25 21:21:12 +01:00
Andreas Kling
5af4e622b9
Kernel: Add KResult and KResultOr<T> classes.
...
The idea here is to combine a potential syscall error code with an arbitrary
type in the case of success. I feel like this will end up much less error
prone than returning some arbitrary type that kinda sorta has bool semantics
(but sometimes not really) and passing the error through an out-param.
This patch only converts a few syscalls to using it. More to come.
2019-02-25 20:50:22 +01:00
Andreas Kling
15fb917f28
Convert more RetainPtr use to Retained.
2019-02-25 16:04:08 +01:00
Andreas Kling
f98dcbf1d6
Kernel: Respect the process umask in open() and mkdir().
2019-02-22 02:39:13 +01:00
Andreas Kling
6d3e12899b
Kernel: Pass process arguments directly on the stack.
...
Get rid of the convoluted get_arguments and get_environment syscalls.
This patch also adds a simple /bin/env that just prints its environment.
2019-02-22 01:55:22 +01:00
Andreas Kling
e969419202
Kernel: Don't allocate and discard an extra stack for every process.
2019-02-22 00:27:06 +01:00
Andreas Kling
920e8e58ed
Kernel+Userland: Implement setuid() and setgid() and add /bin/su
...
Also show setuid and setgid bits in "ls -l" output. :^)
2019-02-21 23:38:10 +01:00