Use rodata
This commit is contained in:
parent
b7ac106623
commit
8be7bb8718
2
func.S
2
func.S
|
|
@ -13,7 +13,7 @@
|
|||
#define AF_INET PF_INET
|
||||
#define SOCK_STREAM 1
|
||||
|
||||
.data
|
||||
.section .rodata
|
||||
errstr: .ascii "error happened\n"
|
||||
.set errstr_len, .-errstr
|
||||
|
||||
|
|
|
|||
32
main.S
32
main.S
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
#define PORT 20335
|
||||
|
||||
.data
|
||||
.section .rodata
|
||||
greeting:
|
||||
.ascii "Welcome to the minimalistic echo server!\n"
|
||||
.ascii "It is written in pure assembly, and it don't use the standard library, only raw system calls.\n"
|
||||
|
|
@ -29,14 +29,11 @@ message: .ascii "Client connected\n"
|
|||
errstr: .ascii "Error happened\n"
|
||||
.set errstr_len, .-errstr
|
||||
|
||||
s: .quad 0
|
||||
s2: .quad 0
|
||||
|
||||
true_val: .quad 1
|
||||
.set true_val_len, .-true_val
|
||||
|
||||
myaddr:
|
||||
.hword AF_INET
|
||||
.hword AF_INET
|
||||
port: .byte (PORT >> 8) & 0xFF, (PORT & 0xFF)
|
||||
addr: .byte 0, 0, 0, 0
|
||||
.set myaddr_len, 16
|
||||
|
|
@ -44,6 +41,9 @@ myaddr:
|
|||
.extern passthru
|
||||
.extern write_buf
|
||||
|
||||
#define server_socket %rbx
|
||||
#define connection_socket %r12
|
||||
|
||||
.text
|
||||
.global _start
|
||||
_start:
|
||||
|
|
@ -59,10 +59,10 @@ _start:
|
|||
syscall
|
||||
cmp $-1, %rax
|
||||
jz error
|
||||
movq %rax, s
|
||||
movq %rax, server_socket
|
||||
|
||||
movq $__NR_setsockopt, %rax
|
||||
movq s, %rdi
|
||||
movq server_socket, %rdi
|
||||
movq $SOL_SOCKET, %rsi
|
||||
movq $SO_REUSEADDR, %rdx
|
||||
movq $true_val, %r10
|
||||
|
|
@ -72,7 +72,7 @@ _start:
|
|||
jnz error
|
||||
|
||||
movq $__NR_bind, %rax
|
||||
movq s, %rdi
|
||||
movq server_socket, %rdi
|
||||
movq $myaddr, %rsi
|
||||
movq $myaddr_len, %rdx
|
||||
syscall
|
||||
|
|
@ -80,7 +80,7 @@ _start:
|
|||
jnz error
|
||||
|
||||
movq $__NR_listen, %rax
|
||||
movq s, %rdi
|
||||
movq server_socket, %rdi
|
||||
movq $8, %rsi
|
||||
syscall
|
||||
test %rax, %rax
|
||||
|
|
@ -88,14 +88,14 @@ _start:
|
|||
|
||||
loop:
|
||||
movq $__NR_accept, %rax
|
||||
movq s, %rdi
|
||||
movq server_socket, %rdi
|
||||
movq $0, %rsi
|
||||
movq $0, %rdx
|
||||
movq $0, %r10
|
||||
syscall
|
||||
cmp $-1, %rax
|
||||
jz error
|
||||
movq %rax, s2
|
||||
movq %rax, connection_socket
|
||||
|
||||
movq $STDOUT, %rdi
|
||||
movq $message, %rsi
|
||||
|
|
@ -116,7 +116,7 @@ loop:
|
|||
/* we're in the parent if we reach this line */
|
||||
|
||||
movq $__NR_close, %rax
|
||||
movq s2, %rdi
|
||||
movq connection_socket, %rdi
|
||||
syscall
|
||||
test %rax, %rax
|
||||
jnz error
|
||||
|
|
@ -124,7 +124,7 @@ loop:
|
|||
|
||||
exit:
|
||||
movq $__NR_close, %rax
|
||||
movq s, %rdi
|
||||
movq server_socket, %rdi
|
||||
syscall
|
||||
test %rax, %rax
|
||||
jnz error
|
||||
|
|
@ -148,12 +148,12 @@ error:
|
|||
|
||||
child:
|
||||
/* we're in the child if we reach this line */
|
||||
movq s2, %rdi
|
||||
movq s2, %rsi
|
||||
movq connection_socket, %rdi
|
||||
movq connection_socket, %rsi
|
||||
call passthru
|
||||
|
||||
movq $__NR_close, %rax
|
||||
movq s2, %rdi
|
||||
movq connection_socket, %rdi
|
||||
syscall
|
||||
|
||||
movq $__NR_exit, %rax
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user