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
30typedef 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 */
41struct 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
55struct 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
70struct callframe {
71 struct callframe *f_frame;
72 register_t f_lr;
73};
74
75#endif /* !_LOCORE */
76
77#endif /* _MACHINE_FRAME_H_ */