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 rdx, 0
syscall
push rax
push r15
mov r15, rax
mov rdi, r15
call nonblocking
mov rdi, r15
call make_sockaddr
pop r10
mov rax, SYS_BIND
mov rdi, r10
mov rdi, r15
mov rsi, sockaddr
mov rdx, sockaddr_size
syscall
mov rax, SYS_LISTEN
mov rdi, r10
mov rdi, r15
mov rsi, 100
syscall
mov rax, r10
mov rax, r15
pop r15
ret
; rdi - fd
nonblocking:
mov r10, rax
push r15
mov r15, rdi
mov rax, SYS_FCNTL
mov rdi, r10
mov rdi, r15
mov rsi, F_GETFL
syscall
mov r11, rax
xor r11, O_NONBLOCK
mov r10, rax
or r10, O_NONBLOCK
mov rax, SYS_FCNTL
mov rdi, r10
mov rdi, r15
mov rsi, F_SETFL
mov rdx, r11
mov rdx, r10
syscall
pop r15
ret
make_sockaddr:
mov word [sockaddr], AF_UNIX
mov rax, 0
mov r10, 0
make_sockaddr__copy_server_path:
cmp rax, server_path_len
cmp r10, server_path_len
jge return
mov r10, [server_path + rax]
mov [sockaddr + rax + 2], r10
add rax, 8
mov r8b, [server_path + r10]
mov [sockaddr + 2 + r10], r8b
add r10, 1
jmp make_sockaddr__copy_server_path