Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/riscv/include/frame.h
39534 views
1
/*-
2
* Copyright (c) 2015 Ruslan Bukin <[email protected]>
3
* All rights reserved.
4
*
5
* Portions of this software were developed by SRI International and the
6
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
7
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
8
*
9
* Portions of this software were developed by the University of Cambridge
10
* Computer Laboratory as part of the CTSRD Project, with support from the
11
* UK Higher Education Innovation Fund (HEIF).
12
*
13
* Redistribution and use in source and binary forms, with or without
14
* modification, are permitted provided that the following conditions
15
* are met:
16
* 1. Redistributions of source code must retain the above copyright
17
* notice, this list of conditions and the following disclaimer.
18
* 2. Redistributions in binary form must reproduce the above copyright
19
* notice, this list of conditions and the following disclaimer in the
20
* documentation and/or other materials provided with the distribution.
21
*
22
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
26
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32
* SUCH DAMAGE.
33
*/
34
35
#ifndef _MACHINE_FRAME_H_
36
#define _MACHINE_FRAME_H_
37
38
#ifndef LOCORE
39
40
#include <sys/signal.h>
41
#include <sys/ucontext.h>
42
43
/*
44
* NOTE: keep this structure in sync with struct reg and struct mcontext.
45
*/
46
struct trapframe {
47
uint64_t tf_ra;
48
uint64_t tf_sp;
49
uint64_t tf_gp;
50
uint64_t tf_tp;
51
uint64_t tf_t[7];
52
uint64_t tf_s[12];
53
uint64_t tf_a[8];
54
uint64_t tf_sepc;
55
uint64_t tf_sstatus;
56
uint64_t tf_stval;
57
uint64_t tf_scause;
58
};
59
60
#ifdef _KERNEL
61
#define TF_SIZE (roundup2(sizeof(struct trapframe), STACKALIGNBYTES + 1))
62
#endif
63
64
/*
65
* Signal frame. Pushed onto user stack before calling sigcode.
66
*/
67
struct sigframe {
68
siginfo_t sf_si; /* actual saved siginfo */
69
ucontext_t sf_uc; /* actual saved ucontext */
70
};
71
72
#ifdef _KERNEL
73
/*
74
* Kernel frame. Reserved near the top of kernel stacks for saving kernel
75
* state while in userspace.
76
*/
77
struct kernframe {
78
register_t kf_tp;
79
};
80
#endif
81
82
#endif /* !LOCORE */
83
84
/* Definitions for syscalls */
85
#define NARGREG 8 /* 8 args in regs */
86
87
#endif /* !_MACHINE_FRAME_H_ */
88
89