1 /*- 2 * SPDX-License-Identifier: BSD-4-Clause 3 * 4 * Copyright (C) 1995, 1996 Wolfgang Solfrank. 5 * Copyright (C) 1995, 1996 TooLs GmbH. 6 * All rights reserved. 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 * 3. All advertising materials mentioning features or use of this software 17 * must display the following acknowledgement: 18 * This product includes software developed by TooLs GmbH. 19 * 4. The name of TooLs GmbH may not be used to endorse or promote products 20 * derived from this software without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR 23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25 * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 27 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 28 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 29 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 30 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 31 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 * 33 * $NetBSD: frame.h,v 1.2 1999/01/10 10:13:15 tsubai Exp $ 34 */ 35 36 #ifndef _MACHINE_FRAME_H_ 37 #define _MACHINE_FRAME_H_ 38 39 #include <sys/types.h> 40 41 /* 42 * We have to save all registers on every trap, because 43 * 1. user could attach this process every time 44 * 2. we must be able to restore all user registers in case of fork 45 * Actually, we do not save the fp registers on trap, since 46 * these are not used by the kernel. They are saved only when switching 47 * between processes using the FPU. 48 * 49 * Change ordering to cluster together these register_t's. XXX 50 */ 51 struct trapframe { 52 register_t fixreg[32]; 53 register_t lr; 54 register_t cr; 55 register_t xer; 56 register_t ctr; 57 register_t srr0; 58 register_t srr1; 59 register_t exc; 60 register_t dar; /* DAR/DEAR filled in on DSI traps */ 61 union { 62 struct { 63 /* dsisr only filled on a DSI trap */ 64 register_t dsisr; 65 } aim; 66 struct { 67 register_t esr; 68 register_t dbcr0; 69 } booke; 70 } cpu; 71 }; 72 73 /* 74 * FRAMELEN is the size of the stack region used by the low-level trap 75 * handler. It is the size of its data (trapframe) plus the callframe 76 * header (sizeof(struct callframe) - 3 register widths). It must also 77 * be 16-byte aligned. 78 */ 79 #define FRAMELEN roundup(sizeof(struct trapframe) + \ 80 sizeof(struct callframe) - 3*sizeof(register_t), 16) 81 #define trapframe(td) ((td)->td_frame) 82 83 /* 84 * Call frame for PowerPC used during fork. 85 */ 86 #ifdef __powerpc64__ 87 struct callframe { 88 register_t cf_dummy_fp; /* dummy frame pointer */ 89 register_t cf_cr; 90 register_t cf_lr; 91 register_t cf_compiler; 92 register_t cf_linkeditor; 93 register_t cf_toc; 94 register_t cf_func; 95 register_t cf_arg0; 96 register_t cf_arg1; 97 register_t _padding; /* Maintain 16-byte alignment */ 98 }; 99 #else 100 struct callframe { 101 register_t cf_dummy_fp; /* dummy frame pointer */ 102 register_t cf_lr; /* space for link register save */ 103 register_t cf_func; 104 register_t cf_arg0; 105 register_t cf_arg1; 106 register_t _padding; /* Maintain 16-byte alignment */ 107 }; 108 #endif 109 110 /* Definitions for syscalls */ 111 #define FIRSTARG 3 /* first arg in reg 3 */ 112 #define NARGREG 8 /* 8 args in regs */ 113 114 #endif /* _MACHINE_FRAME_H_ */ 115