mirror of https://github.com/tailix/libclayer.git
29 lines
722 B
ArmAsm
29 lines
722 B
ArmAsm
|
/**
|
||
|
* The code was taken from musl libc.
|
||
|
*
|
||
|
* Copyright (c) 2011 Nicholas J. Kain
|
||
|
* Copyright (c) 2011-2012 Rich Felker
|
||
|
* Copyright (c) 2022 Alexander Monakov
|
||
|
* Copyright (c) 2022 Alex Kotov
|
||
|
*/
|
||
|
|
||
|
#ifdef HAVE_CONFIG_H
|
||
|
#include "config.h"
|
||
|
#endif
|
||
|
|
||
|
.global setjmp
|
||
|
.type setjmp, @function
|
||
|
setjmp:
|
||
|
mov %rbx , (%rdi) /* rdi is jmp_buf, move registers onto it */
|
||
|
mov %rbp , 8(%rdi)
|
||
|
mov %r12 , 16(%rdi)
|
||
|
mov %r13 , 24(%rdi)
|
||
|
mov %r14 , 32(%rdi)
|
||
|
mov %r15 , 40(%rdi)
|
||
|
lea 8(%rsp) , %rdx /* this is our rsp WITHOUT current ret addr */
|
||
|
mov %rdx , 48(%rdi)
|
||
|
mov (%rsp) , %rdx /* save return addr ptr for new rip */
|
||
|
mov %rdx , 56(%rdi)
|
||
|
xor %eax , %eax /* always return 0 */
|
||
|
ret
|