1 1.11 riastrad /* $NetBSD: frame.h,v 1.11 2025/04/25 00:59:27 riastradh Exp $ */ 2 1.1 cgd 3 1.1 cgd /* 4 1.1 cgd * Copyright (c) 1994, 1995 Carnegie-Mellon University. 5 1.1 cgd * All rights reserved. 6 1.1 cgd * 7 1.1 cgd * Author: Chris G. Demetriou 8 1.9 matt * 9 1.1 cgd * Permission to use, copy, modify and distribute this software and 10 1.1 cgd * its documentation is hereby granted, provided that both the copyright 11 1.1 cgd * notice and this permission notice appear in all copies of the 12 1.1 cgd * software, derivative works or modified versions, and any portions 13 1.1 cgd * thereof, and that both notices appear in supporting documentation. 14 1.9 matt * 15 1.9 matt * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 16 1.9 matt * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 17 1.1 cgd * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 18 1.9 matt * 19 1.1 cgd * Carnegie Mellon requests users of this software to return to 20 1.1 cgd * 21 1.1 cgd * Software Distribution Coordinator or Software.Distribution (at) CS.CMU.EDU 22 1.1 cgd * School of Computer Science 23 1.1 cgd * Carnegie Mellon University 24 1.1 cgd * Pittsburgh PA 15213-3890 25 1.1 cgd * 26 1.1 cgd * any improvements or extensions that they make and grant Carnegie the 27 1.1 cgd * rights to redistribute these changes. 28 1.1 cgd */ 29 1.1 cgd 30 1.1 cgd #ifndef _ALPHA_FRAME_H_ 31 1.1 cgd #define _ALPHA_FRAME_H_ 32 1.1 cgd 33 1.2 cgd #include <machine/alpha_cpu.h> 34 1.8 he #include <sys/signal.h> 35 1.1 cgd 36 1.1 cgd /* 37 1.3 cgd * Software trap, exception, and syscall frame. 38 1.1 cgd * 39 1.3 cgd * Includes "hardware" (PALcode) frame. 40 1.3 cgd * 41 1.3 cgd * PALcode puts ALPHA_HWFRAME_* fields on stack. We have to add 42 1.3 cgd * all of the general-purpose registers except for zero, for sp 43 1.3 cgd * (which is automatically saved in the PCB's USP field for entries 44 1.3 cgd * from user mode, and which is implicitly saved and restored by the 45 1.3 cgd * calling conventions for entries from kernel mode), and (on traps 46 1.3 cgd * and exceptions) for a0, a1, and a2 (which are saved by PALcode). 47 1.1 cgd */ 48 1.1 cgd 49 1.3 cgd /* Quadword offsets of the registers to be saved. */ 50 1.1 cgd #define FRAME_V0 0 51 1.1 cgd #define FRAME_T0 1 52 1.1 cgd #define FRAME_T1 2 53 1.1 cgd #define FRAME_T2 3 54 1.1 cgd #define FRAME_T3 4 55 1.1 cgd #define FRAME_T4 5 56 1.1 cgd #define FRAME_T5 6 57 1.1 cgd #define FRAME_T6 7 58 1.1 cgd #define FRAME_T7 8 59 1.1 cgd #define FRAME_S0 9 60 1.1 cgd #define FRAME_S1 10 61 1.1 cgd #define FRAME_S2 11 62 1.1 cgd #define FRAME_S3 12 63 1.1 cgd #define FRAME_S4 13 64 1.1 cgd #define FRAME_S5 14 65 1.1 cgd #define FRAME_S6 15 66 1.1 cgd #define FRAME_A3 16 67 1.1 cgd #define FRAME_A4 17 68 1.1 cgd #define FRAME_A5 18 69 1.1 cgd #define FRAME_T8 19 70 1.1 cgd #define FRAME_T9 20 71 1.1 cgd #define FRAME_T10 21 72 1.1 cgd #define FRAME_T11 22 73 1.1 cgd #define FRAME_RA 23 74 1.1 cgd #define FRAME_T12 24 75 1.1 cgd #define FRAME_AT 25 76 1.1 cgd #define FRAME_SP 26 77 1.3 cgd 78 1.3 cgd #define FRAME_SW_SIZE (FRAME_SP + 1) 79 1.3 cgd #define FRAME_HW_OFFSET FRAME_SW_SIZE 80 1.3 cgd 81 1.3 cgd #define FRAME_PS (FRAME_HW_OFFSET + ALPHA_HWFRAME_PS) 82 1.3 cgd #define FRAME_PC (FRAME_HW_OFFSET + ALPHA_HWFRAME_PC) 83 1.3 cgd #define FRAME_GP (FRAME_HW_OFFSET + ALPHA_HWFRAME_GP) 84 1.3 cgd #define FRAME_A0 (FRAME_HW_OFFSET + ALPHA_HWFRAME_A0) 85 1.3 cgd #define FRAME_A1 (FRAME_HW_OFFSET + ALPHA_HWFRAME_A1) 86 1.3 cgd #define FRAME_A2 (FRAME_HW_OFFSET + ALPHA_HWFRAME_A2) 87 1.3 cgd 88 1.3 cgd #define FRAME_HW_SIZE ALPHA_HWFRAME_SIZE 89 1.3 cgd #define FRAME_SIZE (FRAME_HW_OFFSET + FRAME_HW_SIZE) 90 1.1 cgd 91 1.1 cgd struct trapframe { 92 1.3 cgd unsigned long tf_regs[FRAME_SIZE]; /* See above */ 93 1.1 cgd }; 94 1.5 skd 95 1.10 maxv #if defined(COMPAT_16) && defined(_KERNEL) 96 1.5 skd struct sigframe_sigcontext { 97 1.5 skd /* ra address of trampoline */ 98 1.5 skd /* a0 signum for handler */ 99 1.5 skd /* a1 code for handler */ 100 1.5 skd /* a2 struct sigcontext for handler */ 101 1.5 skd struct sigcontext sf_sc; /* actual saved context */ 102 1.5 skd }; 103 1.5 skd #endif 104 1.5 skd 105 1.5 skd struct sigframe_siginfo { 106 1.5 skd /* ra address of trampoline */ 107 1.5 skd /* a0 signal number arg for handler */ 108 1.5 skd /* a1 siginfo_t * arg for handler */ 109 1.5 skd /* a2 ucontext_t * arg for handler */ 110 1.5 skd siginfo_t sf_si; /* actual saved siginfo */ 111 1.5 skd ucontext_t sf_uc; /* actual saved ucontext */ 112 1.5 skd }; 113 1.5 skd 114 1.5 skd #ifdef _KERNEL 115 1.11 riastrad 116 1.11 riastrad #include <sys/stddef.h> 117 1.11 riastrad void *getframe(const struct lwp *, int, int *, size_t, size_t); 118 1.5 skd void buildcontext(struct lwp *, const void *, const void *, const void *); 119 1.5 skd void sendsig_siginfo(const ksiginfo_t *, const sigset_t *); 120 1.10 maxv #if defined(COMPAT_16) 121 1.5 skd void sendsig_sigcontext(const ksiginfo_t *, const sigset_t *); 122 1.5 skd #endif 123 1.11 riastrad 124 1.5 skd #endif 125 1.1 cgd 126 1.1 cgd #endif /* _ALPHA_FRAME_H_ */ 127