server.s: use r15 not r10 for persisting thru syscalls

This commit is contained in:
root 2025-05-21 09:07:31 +00:00
parent e31c9452c8
commit c16c82b15f

View file

@ -9,53 +9,61 @@ make_server:
mov rsi, SOCK_STREAM mov rsi, SOCK_STREAM
mov rdx, 0 mov rdx, 0
syscall syscall
push rax
push r15
mov r15, rax
mov rdi, r15
call nonblocking call nonblocking
mov rdi, r15
call make_sockaddr call make_sockaddr
pop r10
mov rax, SYS_BIND mov rax, SYS_BIND
mov rdi, r10 mov rdi, r15
mov rsi, sockaddr mov rsi, sockaddr
mov rdx, sockaddr_size mov rdx, sockaddr_size
syscall syscall
mov rax, SYS_LISTEN mov rax, SYS_LISTEN
mov rdi, r10 mov rdi, r15
mov rsi, 100 mov rsi, 100
syscall syscall
mov rax, r10 mov rax, r15
pop r15
ret ret
; rdi - fd
nonblocking: nonblocking:
mov r10, rax push r15
mov r15, rdi
mov rax, SYS_FCNTL mov rax, SYS_FCNTL
mov rdi, r10 mov rdi, r15
mov rsi, F_GETFL mov rsi, F_GETFL
syscall syscall
mov r11, rax mov r10, rax
xor r11, O_NONBLOCK or r10, O_NONBLOCK
mov rax, SYS_FCNTL mov rax, SYS_FCNTL
mov rdi, r10 mov rdi, r15
mov rsi, F_SETFL mov rsi, F_SETFL
mov rdx, r11 mov rdx, r10
syscall syscall
pop r15
ret ret
make_sockaddr: make_sockaddr:
mov word [sockaddr], AF_UNIX mov word [sockaddr], AF_UNIX
mov rax, 0 mov r10, 0
make_sockaddr__copy_server_path: make_sockaddr__copy_server_path:
cmp rax, server_path_len cmp r10, server_path_len
jge return jge return
mov r10, [server_path + rax] mov r8b, [server_path + r10]
mov [sockaddr + rax + 2], r10 mov [sockaddr + 2 + r10], r8b
add rax, 8 add r10, 1
jmp make_sockaddr__copy_server_path jmp make_sockaddr__copy_server_path