22 lines
629 B
ArmAsm
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
|