1 /* $OpenBSD: frame.h,v 1.3 2018/06/30 15:23:37 deraadt Exp $ */ 2 /* 3 * Copyright (c) 2016 Dale Rahn <drahn@dalerahn.com> 4 * 5 * Permission to use, copy, modify, and distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 #ifndef _MACHINE_FRAME_H_ 19 #define _MACHINE_FRAME_H_ 20 21 #ifndef _LOCORE 22 23 #include <sys/signal.h> 24 25 26 /* 27 * Exception/Trap Stack Frame 28 */ 29 #define clockframe trapframe 30 typedef struct trapframe { 31 register_t tf_sp; 32 register_t tf_lr; 33 register_t tf_elr; 34 register_t tf_spsr; 35 register_t tf_x[30]; 36 } trapframe_t; 37 38 /* 39 * pushed on stack for signal delivery 40 */ 41 struct sigframe { 42 int sf_signum; 43 struct sigcontext sf_sc; 44 siginfo_t sf_si; 45 }; 46 47 /* 48 * System stack frames. 49 */ 50 51 /* 52 * Stack frame inside cpu_switch() 53 */ 54 55 struct switchframe { 56 register_t sf_x19; 57 register_t sf_x20; 58 register_t sf_x21; 59 register_t sf_x22; 60 register_t sf_x23; 61 register_t sf_x24; 62 register_t sf_x25; 63 register_t sf_x26; 64 register_t sf_x27; 65 register_t sf_x28; 66 register_t sf_x29; 67 register_t sf_lr; 68 }; 69 70 struct callframe { 71 struct callframe *f_frame; 72 register_t f_lr; 73 }; 74 75 #endif /* !_LOCORE */ 76 77 #endif /* _MACHINE_FRAME_H_ */ 78