git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Usermode/libc - Fix strchr and strrchr behavior
[tpg/acess2.git]
/
Usermode
/
Libraries
/
ld-acess.so_src
/
arch
/
x86_64.asm.h
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
ea605ef
..
b80e092
100644
(file)
--- 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
; ========================
; AcssMicro - System Calls
; ========================
-%include "../../../Kernel/include/syscalls.inc.asm"
-
[bits 64]
[section .text]
[global _start]
[extern SoMain]
_start:
[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
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
call rax
mov rdi, rax
@@
-55,9
+56,11
@@
_errno: dw 0 ; Placed in .text, to allow use of relative addressing
[global %1:func]
%1:
push rbx
[global %1:func]
%1:
push rbx
+ push rbp
mov eax, %2
SYSCALL_OP
mov [DWORD rel _errno], ebx
mov eax, %2
SYSCALL_OP
mov [DWORD rel _errno], ebx
+ pop rbp
pop rbx
ret
%endmacro
pop rbx
ret
%endmacro
@@
-152,6
+155,9
@@
clone:
push rbp
mov rbp, rsp
push rbx
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
; Check if the new stack is being used
test rsi, rsi
@@
-166,10
+172,20
@@
clone:
mov eax, SYS_CLONE
SYSCALL_OP
mov [rel _errno], ebx
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
pop rbx
pop rbp
ret
+
[global _exit:func]
_exit:
xor eax, eax
[global _exit:func]
_exit:
xor eax, eax
UCC
git Repository :: git.ucc.asn.au