X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Farch%2Fx86_64%2Fstart64.asm;h=5027a1e8ba302a27b8401277ccc478919decfa32;hb=bc55dc5d60469521269a41928d3d15809e2c8134;hp=d0cc503fc1cbf8a2760aa85b4aad65987667bab3;hpb=a1b7b0fcbf99e2c53dd6d7ee5961772bf29bdb2b;p=tpg%2Facess2.git diff --git a/Kernel/arch/x86_64/start64.asm b/Kernel/arch/x86_64/start64.asm index d0cc503f..5027a1e8 100644 --- a/Kernel/arch/x86_64/start64.asm +++ b/Kernel/arch/x86_64/start64.asm @@ -35,7 +35,7 @@ start64: rep stosq ; Set kernel stack - mov rsp, gInitialKernelStack + mov rsp, 0xFFFFA00000000000 + 0x10000 ; Call main mov edi, [gMultibootMagic - KERNEL_BASE] @@ -47,11 +47,6 @@ start64: hlt jmp .hlt -[global GetRIP] -GetRIP: - mov rax, [rsp] - ret - [global GetCPUNum] GetCPUNum: xor rax, rax @@ -106,16 +101,53 @@ Proc_ReturnToUser: CallWithArgArray: push rbp mov rbp, rsp - mov rcx, [rbp+3*8] ; Get NArgs - mov rdx, [rbp+4*8] - -.top: - mov rax, [rdx+rcx*8-8] - push rax - loop .top + push r10 + push r11 - mov rax, [rbp+2*8] + mov [rbp+2*8], rdi ; Save Ptr to stack + + mov r11, rsi ; NArgs + mov r10, rdx ; Args + + ; Arg 1: RDI + mov rdi, [r10] + add r10, 8 + dec r11 + jz .call + ; Arg 2: RSI + mov rsi, [r10] + add r10, 8 + dec r11 + jz .call + ; Arg 3: RDX + mov rdx, [r10] + add r10, 8 + dec r11 + jz .call + ; Arg 4: RCX + mov rcx, [r10] + add r10, 8 + dec r11 + jz .call + ; Arg 5: R8 + mov r8, [r10] + add r10, 8 + dec r11 + jz .call + ; Arg 6: R9 + mov r9, [r10] + add r10, 8 + dec r11 + jz .call + ; No support for more + +.call: + mov rax, [rbp+2*8] ; Ptr call rax + + pop r11 + pop r10 + lea rsp, [rbp] pop rbp ret @@ -129,8 +161,3 @@ User_Syscall_Exit: ; RDI: Return Value int 0xAC -[section .bss] -[global gInitialKernelStack] - resd 1024*4 ; 4 Pages -gInitialKernelStack: -