server.s: use r15 not r10 for persisting thru syscalls
This commit is contained in:
parent
e31c9452c8
commit
c16c82b15f
1 changed files with 24 additions and 16 deletions
40
server.s
40
server.s
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue