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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22/* 23 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27#pragma ident "%Z%%M% %I% %E% SMI" 28 29 .file "%M%" 30 31#ifdef _LIBCRUN_ 32#define ENTRY(x) \ 33 .text; \ 34 .align 8; \ 35 .globl x; \ 36 .type x, @function; \ 37 x: 38#define SET_SIZE(x) \ 39 .size x, .-x 40#else 41#include "SYS.h" 42#endif 43 44/* 45 * ==================== 46 * _Unw_capture_regs() 47 * -------------------- 48 * 49 * Given foo()->ex_throw()->_Unwind_RaiseException()->_Unw_capture_regs() 50 * fills in a register array with FP and the preserved registers 51 */ 52 ENTRY(_Unw_capture_regs) 53 movq %rbx,24(%rdi) /* save preserved registers */ 54 movq %rbp,48(%rdi) 55 movq %r12,96(%rdi) 56 movq %r13,104(%rdi) 57 movq %r14,112(%rdi) 58 movq %r15,120(%rdi) 59 ret 60 SET_SIZE(_Unw_capture_regs) 61 62/* 63 * ==================== 64 * _Unw_jmp 65 * -------------------- 66 * 67 * _Unw_jmp is passed a pc and an array of register values. 68 */ 69 70 ENTRY(_Unw_jmp) 71 movq %rdi,%r8 /* save arguments to this func */ 72 movq %rsi,%rax 73 movq 40(%rax),%rdi /* set handler parameters */ 74 movq 32(%rax),%rsi 75 movq 8(%rax),%rdx 76 movq 16(%rax),%rcx 77 movq 24(%rax),%rbx /* restore preserved registers */ 78 movq 96(%rax),%r12 79 movq 104(%rax),%r13 80 movq 112(%rax),%r14 81 movq 120(%rax),%r15 82 movq 48(%rax),%rbp 83 movq 56(%rax),%rsp 84 jmp *%r8 /* branch to handler */ 85 SET_SIZE(_Unw_jmp) 86