1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
.section .text
.global kernelvec
.global uservec
.global userret
.align 12
kernelvec:
addi sp, sp, -288
sd ra, 40(sp)
sd sp, 48(sp)
sd gp, 56(sp)
sd tp, 64(sp)
sd t0, 72(sp)
sd t1, 80(sp)
sd t2, 88(sp)
sd s0, 96(sp)
sd s1, 104(sp)
sd a0, 112(sp)
sd a1, 120(sp)
sd a2, 128(sp)
sd a3, 136(sp)
sd a4, 144(sp)
sd a5, 152(sp)
sd a6, 160(sp)
sd a7, 168(sp)
sd s2, 176(sp)
sd s3, 184(sp)
sd s4, 192(sp)
sd s5, 200(sp)
sd s6, 208(sp)
sd s7, 216(sp)
sd s8, 224(sp)
sd s9, 232(sp)
sd s10, 240(sp)
sd s11, 248(sp)
sd t3, 256(sp)
sd t4, 264(sp)
sd t5, 272(sp)
sd t6, 280(sp)
csrr t0, sepc
csrr t1, sstatus
sd t0, 24(sp) # Trapframe.epc
sd t1, 32(sp) # Trapframe.kernel_hartid
mv a0, sp
call kerneltrap
ld t0, 24(sp)
ld t1, 32(sp)
csrw sepc, t0
csrw sstatus, t1
ld ra, 40(sp)
ld gp, 56(sp)
ld tp, 64(sp)
ld t0, 72(sp)
ld t1, 80(sp)
ld t2, 88(sp)
ld s0, 96(sp)
ld s1, 104(sp)
ld a0, 112(sp)
ld a1, 120(sp)
ld a2, 128(sp)
ld a3, 136(sp)
ld a4, 144(sp)
ld a5, 152(sp)
ld a6, 160(sp)
ld a7, 168(sp)
ld s2, 176(sp)
ld s3, 184(sp)
ld s4, 192(sp)
ld s5, 200(sp)
ld s6, 208(sp)
ld s7, 216(sp)
ld s8, 224(sp)
ld s9, 232(sp)
ld s10, 240(sp)
ld s11, 248(sp)
ld t3, 256(sp)
ld t4, 264(sp)
ld t5, 272(sp)
ld t6, 280(sp)
addi sp, sp, 288
sret
|