libasm/ft_write.s

22 lines
504 B
ArmAsm

extern __errno_location
section .text
global ft_write
ft_write:
mov rax, 1 ; syscall write, other arguments should be good accord to calling convention
syscall
cmp eax, -1 ; linux syscalls errors are always in the range -4095 to -1
jg .done
cmp eax, -4095
jl .done
mov rbx, rax ; save return value of syscall
call __errno_location ; put address of errno in rax
neg rbx ; errno should be positive
mov [rax], rbx ; set errno
mov rax, -1 ; set return value of ft_write to -1
ret
.done:
ret