Kernel: Syscalls now get the interrupt stack
This commit is contained in:
		
							parent
							
								
									21c6135ae2
								
							
						
					
					
						commit
						4e35b8b49d
					
				|  | @ -163,7 +163,11 @@ syscall_asm: | ||||||
| 	movq %rax, %rdi | 	movq %rax, %rdi | ||||||
| 	movq %rbx, %rsi | 	movq %rbx, %rsi | ||||||
| 	xchgq %rcx, %rdx | 	xchgq %rcx, %rdx | ||||||
|  | 	movq %rsp, %rbx | ||||||
|  | 	addq $120, %rbx | ||||||
|  | 	pushq %rbx | ||||||
| 	call cpp_syscall_handler | 	call cpp_syscall_handler | ||||||
|  | 	addq $8, %rsp | ||||||
| 	popaq_no_rax | 	popaq_no_rax | ||||||
| 	addq $8, %rsp | 	addq $8, %rsp | ||||||
| 	iretq | 	iretq | ||||||
|  | @ -0,0 +1,17 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <stdint.h> | ||||||
|  | 
 | ||||||
|  | namespace Kernel | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | 	struct InterruptStack | ||||||
|  | 	{ | ||||||
|  | 		uint64_t rip; | ||||||
|  | 		uint64_t cs; | ||||||
|  | 		uint64_t flags; | ||||||
|  | 		uint64_t rsp; | ||||||
|  | 		uint64_t ss; | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| #include <kernel/Debug.h> | #include <kernel/Debug.h> | ||||||
|  | #include <kernel/InterruptStack.h> | ||||||
| #include <kernel/Process.h> | #include <kernel/Process.h> | ||||||
| #include <kernel/Syscall.h> | #include <kernel/Syscall.h> | ||||||
| 
 | 
 | ||||||
|  | @ -17,7 +18,7 @@ namespace Kernel | ||||||
| 
 | 
 | ||||||
| 	extern "C" long sys_fork_trampoline(); | 	extern "C" long sys_fork_trampoline(); | ||||||
| 
 | 
 | ||||||
| 	extern "C" long cpp_syscall_handler(int syscall, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t arg4, uintptr_t arg5) | 	extern "C" long cpp_syscall_handler(int syscall, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t arg4, uintptr_t arg5, InterruptStack& interrupt_stack) | ||||||
| 	{ | 	{ | ||||||
| 		Thread::current().set_in_syscall(true); | 		Thread::current().set_in_syscall(true); | ||||||
| 
 | 
 | ||||||
|  | @ -28,6 +29,7 @@ namespace Kernel | ||||||
| 		(void)arg3; | 		(void)arg3; | ||||||
| 		(void)arg4; | 		(void)arg4; | ||||||
| 		(void)arg5; | 		(void)arg5; | ||||||
|  | 		(void)interrupt_stack; | ||||||
| 
 | 
 | ||||||
| 		BAN::ErrorOr<long> ret = BAN::Error::from_errno(ENOSYS); | 		BAN::ErrorOr<long> ret = BAN::Error::from_errno(ENOSYS); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue