added the option to customize _start
This commit is contained in:
2
tests/start_override.expected
Normal file
2
tests/start_override.expected
Normal file
@@ -0,0 +1,2 @@
|
||||
hello world
|
||||
24
|
||||
44
tests/start_override.sl
Normal file
44
tests/start_override.sl
Normal file
@@ -0,0 +1,44 @@
|
||||
import stdlib.sl
|
||||
|
||||
:asm _start {
|
||||
mov rdi, [rsp]
|
||||
lea rsi, [rsp+8]
|
||||
mov [rel sys_argc], rdi
|
||||
mov [rel sys_argv], rsi
|
||||
lea r12, [rel dstack_top]
|
||||
mov r15, r12
|
||||
lea r13, [rel rstack_top]
|
||||
; print "hello world\n" before calling main using runtime `print_buf`
|
||||
mov byte [rel print_buf], 'h'
|
||||
mov byte [rel print_buf + 1], 'e'
|
||||
mov byte [rel print_buf + 2], 'l'
|
||||
mov byte [rel print_buf + 3], 'l'
|
||||
mov byte [rel print_buf + 4], 'o'
|
||||
mov byte [rel print_buf + 5], ' '
|
||||
mov byte [rel print_buf + 6], 'w'
|
||||
mov byte [rel print_buf + 7], 'o'
|
||||
mov byte [rel print_buf + 8], 'r'
|
||||
mov byte [rel print_buf + 9], 'l'
|
||||
mov byte [rel print_buf + 10], 'd'
|
||||
mov byte [rel print_buf + 11], 10
|
||||
lea rsi, [rel print_buf]
|
||||
mov rdx, 12
|
||||
mov rax, 1
|
||||
mov rdi, 1
|
||||
syscall
|
||||
call main
|
||||
mov rax, 0
|
||||
cmp r12, r15
|
||||
je .no_exit_value
|
||||
mov rax, [r12]
|
||||
add r12, 8
|
||||
.no_exit_value:
|
||||
mov rdi, rax
|
||||
mov rax, 60
|
||||
syscall
|
||||
};
|
||||
|
||||
word main
|
||||
24 puti cr
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user