Use rodata

This commit is contained in:
numzero 2024-08-11 23:27:02 +03:00
parent b7ac106623
commit 8be7bb8718
2 changed files with 17 additions and 17 deletions

2
func.S
View File

@ -13,7 +13,7 @@
#define AF_INET PF_INET #define AF_INET PF_INET
#define SOCK_STREAM 1 #define SOCK_STREAM 1
.data .section .rodata
errstr: .ascii "error happened\n" errstr: .ascii "error happened\n"
.set errstr_len, .-errstr .set errstr_len, .-errstr

32
main.S
View File

@ -14,7 +14,7 @@
#define PORT 20335 #define PORT 20335
.data .section .rodata
greeting: greeting:
.ascii "Welcome to the minimalistic echo server!\n" .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" .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" errstr: .ascii "Error happened\n"
.set errstr_len, .-errstr .set errstr_len, .-errstr
s: .quad 0
s2: .quad 0
true_val: .quad 1 true_val: .quad 1
.set true_val_len, .-true_val .set true_val_len, .-true_val
myaddr: myaddr:
.hword AF_INET .hword AF_INET
port: .byte (PORT >> 8) & 0xFF, (PORT & 0xFF) port: .byte (PORT >> 8) & 0xFF, (PORT & 0xFF)
addr: .byte 0, 0, 0, 0 addr: .byte 0, 0, 0, 0
.set myaddr_len, 16 .set myaddr_len, 16
@ -44,6 +41,9 @@ myaddr:
.extern passthru .extern passthru
.extern write_buf .extern write_buf
#define server_socket %rbx
#define connection_socket %r12
.text .text
.global _start .global _start
_start: _start:
@ -59,10 +59,10 @@ _start:
syscall syscall
cmp $-1, %rax cmp $-1, %rax
jz error jz error
movq %rax, s movq %rax, server_socket
movq $__NR_setsockopt, %rax movq $__NR_setsockopt, %rax
movq s, %rdi movq server_socket, %rdi
movq $SOL_SOCKET, %rsi movq $SOL_SOCKET, %rsi
movq $SO_REUSEADDR, %rdx movq $SO_REUSEADDR, %rdx
movq $true_val, %r10 movq $true_val, %r10
@ -72,7 +72,7 @@ _start:
jnz error jnz error
movq $__NR_bind, %rax movq $__NR_bind, %rax
movq s, %rdi movq server_socket, %rdi
movq $myaddr, %rsi movq $myaddr, %rsi
movq $myaddr_len, %rdx movq $myaddr_len, %rdx
syscall syscall
@ -80,7 +80,7 @@ _start:
jnz error jnz error
movq $__NR_listen, %rax movq $__NR_listen, %rax
movq s, %rdi movq server_socket, %rdi
movq $8, %rsi movq $8, %rsi
syscall syscall
test %rax, %rax test %rax, %rax
@ -88,14 +88,14 @@ _start:
loop: loop:
movq $__NR_accept, %rax movq $__NR_accept, %rax
movq s, %rdi movq server_socket, %rdi
movq $0, %rsi movq $0, %rsi
movq $0, %rdx movq $0, %rdx
movq $0, %r10 movq $0, %r10
syscall syscall
cmp $-1, %rax cmp $-1, %rax
jz error jz error
movq %rax, s2 movq %rax, connection_socket
movq $STDOUT, %rdi movq $STDOUT, %rdi
movq $message, %rsi movq $message, %rsi
@ -116,7 +116,7 @@ loop:
/* we're in the parent if we reach this line */ /* we're in the parent if we reach this line */
movq $__NR_close, %rax movq $__NR_close, %rax
movq s2, %rdi movq connection_socket, %rdi
syscall syscall
test %rax, %rax test %rax, %rax
jnz error jnz error
@ -124,7 +124,7 @@ loop:
exit: exit:
movq $__NR_close, %rax movq $__NR_close, %rax
movq s, %rdi movq server_socket, %rdi
syscall syscall
test %rax, %rax test %rax, %rax
jnz error jnz error
@ -148,12 +148,12 @@ error:
child: child:
/* we're in the child if we reach this line */ /* we're in the child if we reach this line */
movq s2, %rdi movq connection_socket, %rdi
movq s2, %rsi movq connection_socket, %rsi
call passthru call passthru
movq $__NR_close, %rax movq $__NR_close, %rax
movq s2, %rdi movq connection_socket, %rdi
syscall syscall
movq $__NR_exit, %rax movq $__NR_exit, %rax