1 /*- 2 * Copyright (c) 2003 Peter Wemm. 3 * Copyright (c) 1990 The Regents of the University of California. 4 * Copyright (c) 2008 The DragonFly Project. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to Berkeley by 8 * William Jolitz. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 3. All advertising materials mentioning features or use of this software 19 * must display the following acknowledgement: 20 * This product includes software developed by the University of 21 * California, Berkeley and its contributors. 22 * 4. Neither the name of the University nor the names of its contributors 23 * may be used to endorse or promote products derived from this software 24 * without specific prior written permission. 25 * 26 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 29 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36 * SUCH DAMAGE. 37 * 38 * from: @(#)frame.h 5.2 (Berkeley) 1/18/91 39 * $FreeBSD: src/sys/amd64/include/frame.h,v 1.26 2003/11/08 04:39:22 peter Exp $ 40 */ 41 42 #ifndef _CPU_FRAME_H_ 43 #define _CPU_FRAME_H_ 44 45 /* JG? */ 46 #include <sys/types.h> 47 48 /* 49 * System stack frames. 50 */ 51 52 /* 53 * Exception/Trap Stack Frame 54 * 55 * The ordering of this is specifically so that we can take first 6 56 * the syscall arguments directly from the beginning of the frame. 57 */ 58 59 struct trapframe { 60 /* note: tf_rdi matches mc_rdi in mcontext */ 61 register_t tf_rdi; 62 register_t tf_rsi; 63 register_t tf_rdx; 64 register_t tf_rcx; 65 register_t tf_r8; 66 register_t tf_r9; 67 register_t tf_rax; 68 register_t tf_rbx; 69 register_t tf_rbp; 70 register_t tf_r10; 71 register_t tf_r11; 72 register_t tf_r12; 73 register_t tf_r13; 74 register_t tf_r14; 75 register_t tf_r15; 76 register_t tf_xflags; 77 register_t tf_trapno; 78 register_t tf_addr; 79 register_t tf_flags; 80 /* below portion defined in hardware */ 81 register_t tf_err; 82 register_t tf_rip; 83 register_t tf_cs; 84 register_t tf_rflags; 85 register_t tf_rsp; 86 register_t tf_ss; 87 }; 88 89 /* Interrupt stack frame */ 90 91 struct intrframe { 92 register_t if_vec; /* vec */ 93 /* fs XXX */ 94 /* es XXX */ 95 /* ds XXX */ 96 register_t if_rdi; 97 register_t if_rsi; 98 register_t if_rdx; 99 register_t if_rcx; 100 register_t if_r8; 101 register_t if_r9; 102 register_t if_rax; 103 register_t if_rbx; 104 register_t if_rbp; 105 register_t if_r10; 106 register_t if_r11; 107 register_t if_r12; 108 register_t if_r13; 109 register_t if_r14; 110 register_t if_r15; 111 register_t if_xflags; /* compat with trap frame - xflags */ 112 register_t :64; /* compat with trap frame - trapno */ 113 register_t :64; /* compat with trap frame - addr */ 114 register_t :64; /* compat with trap frame - flags */ 115 register_t :64; /* compat with trap frame - err */ 116 /* below portion defined in hardware */ 117 register_t if_rip; 118 register_t if_cs; 119 register_t if_rflags; 120 register_t if_rsp; 121 register_t if_ss; 122 }; 123 124 int kdb_trap(int, int, struct trapframe *); 125 126 #endif /* _CPU_FRAME_H_ */ 127