X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=Usermode%2FLibraries%2Fld-acess.so_src%2Farch%2Fx86_64.asm.h;h=350585a0136f4e13493a9d8f44a2b15d37488052;hb=6516331968f11dd9e5c495572f27cc69fa3d4c48;hp=ea605ef69bdd766eedeea09dbf7ab10f3ee3726f;hpb=40b3565d79c0fd55f83e6470a458945efa21f6da;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/ld-acess.so_src/arch/x86_64.asm.h b/Usermode/Libraries/ld-acess.so_src/arch/x86_64.asm.h index ea605ef6..350585a0 100644 --- a/Usermode/Libraries/ld-acess.so_src/arch/x86_64.asm.h +++ b/Usermode/Libraries/ld-acess.so_src/arch/x86_64.asm.h @@ -2,20 +2,21 @@ ; AcssMicro - System Calls ; ======================== -%include "../../../Kernel/include/syscalls.inc.asm" - [bits 64] [section .text] [global _start] [extern SoMain] _start: - pop rdi + mov rdi, [rsp ] ; Base + mov rsi, [rsp+ 8] ; ArgC + mov rdx, [rsp+16] ; ArgV + mov rcx, [rsp+24] ; EnvP call SoMain - mov rdi, [rsp] - mov rsi, [rsp+8] - mov rdx, [rsp+16] + mov rdi, [rsp+8] + mov rsi, [rsp+16] + mov rdx, [rsp+24] call rax mov rdi, rax @@ -152,6 +153,9 @@ clone: push rbp mov rbp, rsp push rbx + push r12 + + mov r12, rsi ; Save in a reg for after the clone ; Check if the new stack is being used test rsi, rsi @@ -166,10 +170,20 @@ clone: mov eax, SYS_CLONE SYSCALL_OP mov [rel _errno], ebx + + ; Change stack pointer + test eax, eax + jnz .ret + test r12, r12 + jz .ret + mov rsp, rsi +.ret: + pop r12 pop rbx pop rbp ret + [global _exit:func] _exit: xor eax, eax