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