github.com/jlmucb/cloudproxy@v0.0.0-20170830161738-b5aa0b619bc4/cpvmm/vmm/host/hw/em64t/em64t_setjmp.s (about)

     1  /*-
     2   * Copyright (c) 1990 The Regents of the University of California.
     3   * All rights reserved.
     4   *
     5   * This code is derived from software contributed to Berkeley by
     6   * William Jolitz.
     7   *
     8   * Redistribution and use in source and binary forms, with or without
     9   * modification, are permitted provided that the following conditions
    10   * are met:
    11   * 1. Redistributions of source code must retain the above copyright
    12   *    notice, this list of conditions and the following disclaimer.
    13   * 2. Redistributions in binary form must reproduce the above copyright
    14   *    notice, this list of conditions and the following disclaimer in the
    15   *    documentation and/or other materials provided with the distribution.
    16   * 4. Neither the name of the University nor the names of its contributors
    17   *    may be used to endorse or promote products derived from this software
    18   *    without specific prior written permission.
    19   *
    20   * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    21   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    23   * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    24   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    25   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    26   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    27   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    28   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    29   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    30   * SUCH DAMAGE.
    31   *  Downloaded 4/6/2014 from 
    32   *  http://fxr.watson.org/fxr/source/amd64/gen/setjmp.S?v=FREEBSD-LIBC
    33   */
    34  
    35  
    36  /*
    37   *      longjmp(a,v)
    38   * will generate a "return(v)" from the last call to
    39   *      setjmp(a)
    40   * by restoring registers from the environment 'a'.
    41   */
    42  
    43  
    44  .text
    45  .align 4
    46  .globl _setjmp
    47  .globl setjmp
    48  
    49  setjmp:
    50  _setjmp:
    51          movq    %rdi,%rcx
    52          movq    0(%rsp),%rdx            /* retval */
    53          movq    %rdx, 0(%rcx)           /* 0; retval */
    54          movq    %rbx, 8(%rcx)           /* 1; rbx */
    55          movq    %rsp,16(%rcx)           /* 2; rsp */
    56          movq    %rbp,24(%rcx)           /* 3; rbp */
    57          movq    %r12,32(%rcx)           /* 4; r12 */
    58          movq    %r13,40(%rcx)           /* 5; r13 */
    59          movq    %r14,48(%rcx)           /* 6; r14 */
    60          movq    %r15,56(%rcx)           /* 7; r15 */
    61          xorq    %rax,%rax
    62          ret
    63  
    64  
    65  .text
    66  .align 4
    67  .globl _longjmp
    68  .globl longjmp
    69  
    70  _longjmp:
    71  longjmp:
    72          movq    %rdi,%rdx
    73          movq    %rsi,%rax       /* retval */
    74          movq    0(%rdx),%rcx
    75          movq    8(%rdx),%rbx
    76          movq    16(%rdx),%rsp
    77          movq    24(%rdx),%rbp
    78          movq    32(%rdx),%r12
    79          movq    40(%rdx),%r13
    80          movq    48(%rdx),%r14
    81          movq    56(%rdx),%r15
    82          movq    %rcx,0(%rsp)
    83          ret
    84  
    85  
    86  .globl  hw_exception_post_handler
    87  hw_exception_post_handler:
    88          mov     $1,%rdx         /* error code */
    89          mov     %rsp, %rcx      /* address of SETJMP_BUFFER */
    90          jmp     longjmp
    91  
    92  
    93