libroot_debug: Merge guarded heap into libroot_debug.
[haiku.git] / src / system / libroot / posix / arch / x86_64 / sigsetjmp.S
blob70866974dc460e6df7af6fda0ded649eef791b1d
1 /*
2  * Copyright 2012, Alex Smith, alex@alex-smith.me.uk.
3  * Distributed under the terms of the MIT License.
4  */
6 #include "setjmp_internal.h"
9 /* int sigsetjmp(jmp_buf buffer, int saveMask) */
10 FUNCTION(__sigsetjmp):
11 FUNCTION(sigsetjmp):
12         // Save instruction/stack pointers.
13         movq    (%rsp), %rax
14         movq    %rax, JMP_REGS_IP(%rdi)
15         leaq    8(%rsp), %rax
16         movq    %rax, JMP_REGS_SP(%rdi)
18         // Save callee-save registers.
19         movq    %rbp, JMP_REGS_BP(%rdi)
20         movq    %rbx, JMP_REGS_BX(%rdi)
21         movq    %r12, JMP_REGS_R12(%rdi)
22         movq    %r13, JMP_REGS_R13(%rdi)
23         movq    %r14, JMP_REGS_R14(%rdi)
24         movq    %r15, JMP_REGS_R15(%rdi)
26         // __setjmp_save_sigs handles signal mask and return value.
27         jmp             __setjmp_save_sigs@PLT
28 FUNCTION_END(setjmp)
31 /* int setjmp(jmp_buf buffer) */
32 FUNCTION(setjmp):
33         // Jump to sigsetjmp with a zero saveMask.
34         xorl    %esi, %esi
35         jmp             sigsetjmp@PLT
36 FUNCTION_END(setjmp)
39 #pragma weak _setjmp=setjmp