xref: /openbsd-src/sys/arch/arm64/include/frame.h (revision 821d13533493c6e3142d773ed339a97d1797cb83)
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