| @@ -22,54 +22,54 @@ | | | @@ -22,54 +22,54 @@ |
22 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | | 22 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
23 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | | 23 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
24 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | | 24 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
25 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | | 25 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
26 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | | 26 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
27 | * POSSIBILITY OF SUCH DAMAGE. | | 27 | * POSSIBILITY OF SUCH DAMAGE. |
28 | */ | | 28 | */ |
29 | | | 29 | |
30 | #include <sys/cdefs.h> | | 30 | #include <sys/cdefs.h> |
31 | | | 31 | |
32 | #define __PMAP_PRIVATE | | 32 | #define __PMAP_PRIVATE |
33 | #define __UFETCHSTORE_PRIVATE | | 33 | #define __UFETCHSTORE_PRIVATE |
34 | | | 34 | |
35 | __RCSID("$NetBSD: trap.c,v 1.7 2020/06/30 16:20:02 maxv Exp $"); | | 35 | __RCSID("$NetBSD: trap.c,v 1.8 2020/11/01 20:56:24 skrll Exp $"); |
36 | | | 36 | |
37 | #include <sys/param.h> | | 37 | #include <sys/param.h> |
38 | #include <sys/systm.h> | | 38 | #include <sys/systm.h> |
39 | #include <sys/atomic.h> | | 39 | #include <sys/atomic.h> |
40 | | | 40 | |
41 | #include <sys/signal.h> | | 41 | #include <sys/signal.h> |
42 | #include <sys/signalvar.h> | | 42 | #include <sys/signalvar.h> |
43 | #include <sys/siginfo.h> | | 43 | #include <sys/siginfo.h> |
44 | | | 44 | |
45 | #include <uvm/uvm.h> | | 45 | #include <uvm/uvm.h> |
46 | | | 46 | |
47 | #include <riscv/locore.h> | | 47 | #include <riscv/locore.h> |
48 | | | 48 | |
49 | #define INSTRUCTION_TRAP_MASK (__BIT(CAUSE_PRIVILEGED_INSTRUCTION) \ | | 49 | #define INSTRUCTION_TRAP_MASK (__BIT(CAUSE_PRIVILEGED_INSTRUCTION) \ |
50 | |__BIT(CAUSE_ILLEGAL_INSTRUCTION)) | | 50 | |__BIT(CAUSE_ILLEGAL_INSTRUCTION)) |
51 | | | 51 | |
52 | #define FAULT_TRAP_MASK (__BIT(CAUSE_FAULT_FETCH) \ | | 52 | #define FAULT_TRAP_MASK (__BIT(CAUSE_FAULT_FETCH) \ |
53 | |__BIT(CAUSE_FAULT_LOAD) \ | | 53 | |__BIT(CAUSE_FAULT_LOAD) \ |
54 | |__BIT(CAUSE_FAULT_STORE)) | | 54 | |__BIT(CAUSE_FAULT_STORE)) |
55 | | | 55 | |
56 | #define MISALIGNED_TRAP_MASK (__BIT(CAUSE_MISALIGNED_FETCH) \ | | 56 | #define MISALIGNED_TRAP_MASK (__BIT(CAUSE_MISALIGNED_FETCH) \ |
57 | |__BIT(CAUSE_MISALIGNED_LOAD) \ | | 57 | |__BIT(CAUSE_MISALIGNED_LOAD) \ |
58 | |__BIT(CAUSE_MISALIGNED_STORE)) | | 58 | |__BIT(CAUSE_MISALIGNED_STORE)) |
59 | | | 59 | |
60 | static const char * const causenames[] = { | | 60 | static const char * const causenames[] = { |
61 | [CAUSE_MISALIGNED_FETCH] = "misaligned fetch", | | 61 | [CAUSE_MISALIGNED_FETCH] = "misaligned fetch", |
62 | [CAUSE_MISALIGNED_LOAD] = "mialigned load", | | 62 | [CAUSE_MISALIGNED_LOAD] = "misaligned load", |
63 | [CAUSE_MISALIGNED_STORE] = "misaligned store", | | 63 | [CAUSE_MISALIGNED_STORE] = "misaligned store", |
64 | [CAUSE_FAULT_FETCH] = "fetch", | | 64 | [CAUSE_FAULT_FETCH] = "fetch", |
65 | [CAUSE_FAULT_LOAD] = "load", | | 65 | [CAUSE_FAULT_LOAD] = "load", |
66 | [CAUSE_FAULT_STORE] = "store", | | 66 | [CAUSE_FAULT_STORE] = "store", |
67 | [CAUSE_FP_DISABLED] = "fp disabled", | | 67 | [CAUSE_FP_DISABLED] = "fp disabled", |
68 | [CAUSE_ILLEGAL_INSTRUCTION] = "illegal instruction", | | 68 | [CAUSE_ILLEGAL_INSTRUCTION] = "illegal instruction", |
69 | [CAUSE_PRIVILEGED_INSTRUCTION] = "privileged instruction", | | 69 | [CAUSE_PRIVILEGED_INSTRUCTION] = "privileged instruction", |
70 | [CAUSE_BREAKPOINT] = "breakpoint", | | 70 | [CAUSE_BREAKPOINT] = "breakpoint", |
71 | }; | | 71 | }; |
72 | | | 72 | |
73 | void | | 73 | void |
74 | cpu_jump_onfault(struct trapframe *tf, const struct faultbuf *fb) | | 74 | cpu_jump_onfault(struct trapframe *tf, const struct faultbuf *fb) |
75 | { | | 75 | { |