Simplify task switches

No longer using the rsp from the entry to the kernel, but instead
switching rsp at task-switching time in assembly.

This currently breaks fork()
This commit is contained in:
Justin C. Miller
2019-03-31 22:49:24 -07:00
parent 5cdbedd4d1
commit ca2362f858
21 changed files with 311 additions and 178 deletions

View File

@@ -3,6 +3,7 @@
extern "C" {
int32_t getpid();
int32_t fork();
void sleep(uint64_t til);
void debug();
@@ -14,6 +15,7 @@ int
main(int argc, const char **argv)
{
int32_t pid = getpid();
//int32_t child = fork();
debug();
for (int i = 1; i < 5; ++i)
sleep(i*10);

View File

@@ -39,6 +39,18 @@ sleep:
pop rbp
ret
global fork
fork:
push rbp
mov rbp, rsp
mov rax, 8
syscall ; pid left in rax
pop rbp
ret
global _start
_start:
xor rbp, rbp ; Sentinel rbp