Files
libasm/ft_strdup.s
2024-05-23 14:59:13 +02:00

22 lines
629 B
ArmAsm

global ft_strdup
extern ft_strlen
extern ft_strcpy
extern malloc
ft_strdup:
call ft_strlen
inc rax ; we add one to the result of strlen for the \0
push rdi ; we put rdi in r10 for later use
mov rdi, rax ; move the result of strlen in rdi
call malloc wrt ..plt ;
test rax, rax ; test if malloc failled
je .end
pop rsi ; we take the value we saved earlier
mov rdi, rax ; move the result of malloc into rdi (override strlen result)
call ft_strcpy ; copy the string
ret ; result is put into rax, return it
.end:
pop rsi ; remove rsi from the stack
ret ; return