/** * 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