1*5e649a87Skettenis /* $OpenBSD: frame.h,v 1.5 2020/07/13 22:37:37 kettenis Exp $ */ 2f6e57a87Skettenis 3f6e57a87Skettenis /* 4f6e57a87Skettenis * Copyright (C) 1995, 1996 Wolfgang Solfrank. 5f6e57a87Skettenis * Copyright (C) 1995, 1996 TooLs GmbH. 6f6e57a87Skettenis * All rights reserved. 7f6e57a87Skettenis * 8f6e57a87Skettenis * Redistribution and use in source and binary forms, with or without 9f6e57a87Skettenis * modification, are permitted provided that the following conditions 10f6e57a87Skettenis * are met: 11f6e57a87Skettenis * 1. Redistributions of source code must retain the above copyright 12f6e57a87Skettenis * notice, this list of conditions and the following disclaimer. 13f6e57a87Skettenis * 2. Redistributions in binary form must reproduce the above copyright 14f6e57a87Skettenis * notice, this list of conditions and the following disclaimer in the 15f6e57a87Skettenis * documentation and/or other materials provided with the distribution. 16f6e57a87Skettenis * 3. All advertising materials mentioning features or use of this software 17f6e57a87Skettenis * must display the following acknowledgement: 18f6e57a87Skettenis * This product includes software developed by TooLs GmbH. 19f6e57a87Skettenis * 4. The name of TooLs GmbH may not be used to endorse or promote products 20f6e57a87Skettenis * derived from this software without specific prior written permission. 21f6e57a87Skettenis * 22f6e57a87Skettenis * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR 23f6e57a87Skettenis * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24f6e57a87Skettenis * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25f6e57a87Skettenis * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26f6e57a87Skettenis * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 27f6e57a87Skettenis * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 28f6e57a87Skettenis * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 29f6e57a87Skettenis * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 30f6e57a87Skettenis * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 31f6e57a87Skettenis * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32f6e57a87Skettenis */ 33f6e57a87Skettenis 34f6e57a87Skettenis #ifndef _MACHDEP_FRAME_H 35f6e57a87Skettenis #define _MACHDEP_FRAME_H 36f6e57a87Skettenis 37f6e57a87Skettenis /* 38*5e649a87Skettenis * We have to save all registers on every trap, because 39*5e649a87Skettenis * 1. user could attach this process every time 40*5e649a87Skettenis * 2. we must be able to restore all user registers in case of fork 41*5e649a87Skettenis * Actually, we do not save the fp registers on trap, since 42*5e649a87Skettenis * these are not used by the kernel. They are saved only when switching 43*5e649a87Skettenis * between processes using the FPU. 44*5e649a87Skettenis * 45*5e649a87Skettenis */ 46*5e649a87Skettenis struct trapframe { 47*5e649a87Skettenis __register_t fixreg[32]; 48*5e649a87Skettenis __register_t lr; 49*5e649a87Skettenis __register_t cr; 50*5e649a87Skettenis __register_t xer; 51*5e649a87Skettenis __register_t ctr; 52*5e649a87Skettenis __register_t srr0; 53*5e649a87Skettenis __register_t srr1; 54*5e649a87Skettenis __register_t vrsave; 55*5e649a87Skettenis __register_t dar; /* dar & dsisr are only filled on a DSI trap */ 56*5e649a87Skettenis __register_t dsisr; 57*5e649a87Skettenis __register_t exc; 58*5e649a87Skettenis }; 59*5e649a87Skettenis 60*5e649a87Skettenis /* 61f6e57a87Skettenis * This is to ensure alignment of the stackpointer 62f6e57a87Skettenis */ 63f6e57a87Skettenis #define FRAMELEN roundup(sizeof(struct trapframe) + 32, 16) 640d8e59b5Skettenis 650d8e59b5Skettenis struct callframe { 660d8e59b5Skettenis register_t cf_sp; 670d8e59b5Skettenis register_t cf_cr; 680d8e59b5Skettenis register_t cf_lr; 690d8e59b5Skettenis register_t cf_toc; 700d8e59b5Skettenis }; 710d8e59b5Skettenis 720f0ef376Skettenis struct sigframe { 730f0ef376Skettenis int sf_signum; 740f0ef376Skettenis siginfo_t *sf_sip; 750f0ef376Skettenis struct sigcontext sf_sc; 760f0ef376Skettenis siginfo_t sf_si; 770f0ef376Skettenis }; 780f0ef376Skettenis 790d8e59b5Skettenis struct switchframe { 800d8e59b5Skettenis register_t sf_sp; 810d8e59b5Skettenis register_t sf_cr; 820d8e59b5Skettenis register_t sf_lr; /* unused */ 830d8e59b5Skettenis register_t sf_toc; /* unused */ 840d8e59b5Skettenis register_t sf_r14; 850d8e59b5Skettenis register_t sf_r15; 860d8e59b5Skettenis register_t sf_r16; 870d8e59b5Skettenis register_t sf_r17; 880d8e59b5Skettenis register_t sf_r18; 890d8e59b5Skettenis register_t sf_r19; 900d8e59b5Skettenis register_t sf_r20; 910d8e59b5Skettenis register_t sf_r21; 920d8e59b5Skettenis register_t sf_r22; 930d8e59b5Skettenis register_t sf_r23; 940d8e59b5Skettenis register_t sf_r24; 950d8e59b5Skettenis register_t sf_r25; 960d8e59b5Skettenis register_t sf_r26; 970d8e59b5Skettenis register_t sf_r27; 980d8e59b5Skettenis register_t sf_r28; 990d8e59b5Skettenis register_t sf_r29; 1000d8e59b5Skettenis register_t sf_r30; 1010d8e59b5Skettenis register_t sf_r31; 1020d8e59b5Skettenis }; 103f6e57a87Skettenis 104f6e57a87Skettenis #endif /* _MACHDEP_FRAME_H_ */ 105