Home | History | Annotate | Download | only in gnuefi
      1 /*
      2  *  GRUB  --  GRand Unified Bootloader
      3  *  Copyright (C) 2003  Free Software Foundation, Inc.
      4  *
      5  *  This program is free software; you can redistribute it and/or modify
      6  *  it under the terms of the GNU General Public License as published by
      7  *  the Free Software Foundation; either version 2 of the License, or
      8  *  (at your option) any later version.
      9  *
     10  *  This program is distributed in the hope that it will be useful,
     11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13  *  GNU General Public License for more details.
     14  *
     15  *  You should have received a copy of the GNU General Public License
     16  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
     17  */
     18 
     19 #define EXT_C(sym) sym
     20 #define FUNCTION(x)     .globl EXT_C(x) ; .type EXT_C(x), @function ; EXT_C(x):
     21 
     22 	.file	"setjmp.S"
     23 
     24 	.text
     25 
     26 /*
     27  * int setjmp (jmp_buf env)
     28  */
     29 FUNCTION(setjmp)
     30 	pop	%rsi		/* Return address, and adjust the stack */
     31 	xor	%rax, %rax
     32 	movq	%rbx, 0(%rdi)	/* RBX */
     33 	movq	%rsp, 8(%rdi)   /* RSP */
     34 	push	%rsi
     35 	movq	%rbp, 16(%rdi)	/* RBP */
     36 	movq	%r12, 24(%rdi)	/* R12 */
     37 	movq	%r13, 32(%rdi)	/* R13 */
     38 	movq	%r14, 40(%rdi)	/* R14 */
     39 	movq	%r15, 48(%rdi)	/* R15 */
     40 	movq	%rsi, 56(%rdi)	/* RSI */
     41 	ret
     42 
     43 /*
     44  * int longjmp (jmp_buf env, int val)
     45  */
     46 FUNCTION(longjmp)
     47 	movl	%esi, %eax
     48 	movq	(%rdi), %rbx
     49 	movq	8(%rdi), %rsp
     50 	movq	16(%rdi), %rbp
     51 	movq	24(%rdi), %r12
     52 	movq    32(%rdi), %r13
     53 	movq    40(%rdi), %r14
     54 	movq    48(%rdi), %r15
     55 	jmp	*56(%rdi)
     56 
     57