Linux: Fix zfs_prune panics
[zfs.git] / module / lua / setjmp / setjmp_x86_64.S
blob337fceb15b00484dd3d75e35bcd903d31684bc78
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or https://opensource.org/licenses/CDDL-1.0.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
23  * Copyright (c) 1992, 2010, Oracle and/or its affiliates. All rights reserved.
24  */
26 #if defined(_KERNEL) && defined(__linux__)
27 #include <linux/linkage.h>
28 #endif
31  * Setjmp and longjmp implement non-local gotos using state vectors
32  * type label_t.
33  */
34 #ifdef __x86_64__
36 #define _ASM
37 #include <sys/asm_linkage.h>
39 ENTRY_ALIGN(setjmp, 8)
40         movq    %rsp, 0(%rdi)
41         movq    %rbp, 8(%rdi)
42         movq    %rbx, 16(%rdi)
43         movq    %r12, 24(%rdi)
44         movq    %r13, 32(%rdi)
45         movq    %r14, 40(%rdi)
46         movq    %r15, 48(%rdi)
47         movq    0(%rsp), %rdx           /* return address */
48         movq    %rdx, 56(%rdi)          /* rip */
49         xorl    %eax, %eax              /* return 0 */
50         RET
51         SET_SIZE(setjmp)
53 ENTRY_ALIGN(longjmp, 8)
54         movq    0(%rdi), %rsp
55         movq    8(%rdi), %rbp
56         movq    16(%rdi), %rbx
57         movq    24(%rdi), %r12
58         movq    32(%rdi), %r13
59         movq    40(%rdi), %r14
60         movq    48(%rdi), %r15
61         movq    56(%rdi), %rdx          /* return address */
62         movq    %rdx, 0(%rsp)
63         xorl    %eax, %eax
64         incl    %eax                    /* return 1 */
65         RET
66         SET_SIZE(longjmp)
68 #ifdef __ELF__
69 .section .note.GNU-stack,"",%progbits
70 #endif
72 #endif /* __x86_64__ */