trap.S revision 1.2 1 1.2 maxv /* $NetBSD: trap.S,v 1.2 2017/12/22 07:37:27 maxv Exp $ */
2 1.1 maxv
3 1.1 maxv /*
4 1.1 maxv * Copyright (c) 2017 The NetBSD Foundation, Inc. All rights reserved.
5 1.1 maxv *
6 1.1 maxv * This code is derived from software contributed to The NetBSD Foundation
7 1.1 maxv * by Maxime Villard.
8 1.1 maxv *
9 1.1 maxv * Redistribution and use in source and binary forms, with or without
10 1.1 maxv * modification, are permitted provided that the following conditions
11 1.1 maxv * are met:
12 1.1 maxv * 1. Redistributions of source code must retain the above copyright
13 1.1 maxv * notice, this list of conditions and the following disclaimer.
14 1.1 maxv * 2. Redistributions in binary form must reproduce the above copyright
15 1.1 maxv * notice, this list of conditions and the following disclaimer in the
16 1.1 maxv * documentation and/or other materials provided with the distribution.
17 1.1 maxv *
18 1.1 maxv * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19 1.1 maxv * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20 1.1 maxv * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 1.1 maxv * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22 1.1 maxv * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 1.1 maxv * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 1.1 maxv * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 1.1 maxv * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 1.1 maxv * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 1.1 maxv * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 1.1 maxv * POSSIBILITY OF SUCH DAMAGE.
29 1.1 maxv */
30 1.1 maxv
31 1.1 maxv #define _KERNEL
32 1.1 maxv
33 1.1 maxv /* Override user-land alignment before including asm.h */
34 1.1 maxv #define ALIGN_DATA .align 8
35 1.1 maxv #define ALIGN_TEXT .align 16,0x90
36 1.1 maxv #define _ALIGN_TEXT ALIGN_TEXT
37 1.1 maxv
38 1.1 maxv #include <machine/asm.h>
39 1.1 maxv
40 1.1 maxv #include <machine/trap.h>
41 1.1 maxv
42 1.1 maxv #define TRAPENTRY(a) \
43 1.1 maxv pushq $(a); \
44 1.1 maxv jmp _C_LABEL(alltraps);
45 1.1 maxv
46 1.1 maxv #define ZTRAPENTRY(a) \
47 1.1 maxv pushq $0; \
48 1.1 maxv pushq $(a); \
49 1.1 maxv jmp _C_LABEL(alltraps);
50 1.1 maxv
51 1.1 maxv .text
52 1.1 maxv
53 1.1 maxv IDTVEC(trap00)
54 1.1 maxv ZTRAPENTRY(T_DIVIDE)
55 1.1 maxv IDTVEC_END(trap00)
56 1.1 maxv
57 1.1 maxv IDTVEC(trap01)
58 1.1 maxv ZTRAPENTRY(T_TRCTRAP)
59 1.1 maxv IDTVEC_END(trap01)
60 1.1 maxv
61 1.1 maxv IDTVEC(trap02)
62 1.1 maxv ZTRAPENTRY(T_NMI)
63 1.1 maxv IDTVEC_END(trap02)
64 1.1 maxv
65 1.1 maxv IDTVEC(trap03)
66 1.1 maxv ZTRAPENTRY(T_BPTFLT)
67 1.1 maxv IDTVEC_END(trap03)
68 1.1 maxv
69 1.1 maxv IDTVEC(trap04)
70 1.1 maxv ZTRAPENTRY(T_OFLOW)
71 1.1 maxv IDTVEC_END(trap04)
72 1.1 maxv
73 1.1 maxv IDTVEC(trap05)
74 1.1 maxv ZTRAPENTRY(T_BOUND)
75 1.1 maxv IDTVEC_END(trap05)
76 1.1 maxv
77 1.1 maxv IDTVEC(trap06)
78 1.1 maxv ZTRAPENTRY(T_PRIVINFLT)
79 1.1 maxv IDTVEC_END(trap06)
80 1.1 maxv
81 1.1 maxv IDTVEC(trap07)
82 1.1 maxv ZTRAPENTRY(T_DNA)
83 1.1 maxv IDTVEC_END(trap07)
84 1.1 maxv
85 1.1 maxv IDTVEC(trap08)
86 1.1 maxv TRAPENTRY(T_DOUBLEFLT)
87 1.1 maxv IDTVEC_END(trap08)
88 1.1 maxv
89 1.1 maxv IDTVEC(trap09)
90 1.1 maxv ZTRAPENTRY(T_FPOPFLT)
91 1.1 maxv IDTVEC_END(trap09)
92 1.1 maxv
93 1.1 maxv IDTVEC(trap0a)
94 1.1 maxv TRAPENTRY(T_TSSFLT)
95 1.1 maxv IDTVEC_END(trap0a)
96 1.1 maxv
97 1.1 maxv IDTVEC(trap0b) /* #NP() Segment not present */
98 1.1 maxv ZTRAPENTRY(T_SEGNPFLT)
99 1.1 maxv IDTVEC_END(trap0b)
100 1.1 maxv
101 1.1 maxv IDTVEC(trap0c) /* #SS() Stack exception */
102 1.1 maxv ZTRAPENTRY(T_STKFLT)
103 1.1 maxv IDTVEC_END(trap0c)
104 1.1 maxv
105 1.1 maxv IDTVEC(trap0d) /* #GP() General protection */
106 1.1 maxv ZTRAPENTRY(T_PROTFLT)
107 1.1 maxv IDTVEC_END(trap0d)
108 1.1 maxv
109 1.1 maxv IDTVEC(trap0e)
110 1.1 maxv TRAPENTRY(T_PAGEFLT)
111 1.1 maxv IDTVEC_END(trap0e)
112 1.1 maxv
113 1.1 maxv IDTVEC(trap0f)
114 1.1 maxv ZTRAPENTRY(T_ASTFLT)
115 1.1 maxv IDTVEC_END(trap0f)
116 1.1 maxv
117 1.1 maxv IDTVEC(trap10)
118 1.1 maxv ZTRAPENTRY(T_ARITHTRAP)
119 1.1 maxv IDTVEC_END(trap10)
120 1.1 maxv
121 1.1 maxv IDTVEC(trap11)
122 1.1 maxv TRAPENTRY(T_ALIGNFLT)
123 1.1 maxv IDTVEC_END(trap11)
124 1.1 maxv
125 1.1 maxv IDTVEC(trap12)
126 1.1 maxv ZTRAPENTRY(T_MCA)
127 1.1 maxv IDTVEC_END(trap12)
128 1.1 maxv
129 1.1 maxv IDTVEC(trap13)
130 1.1 maxv ZTRAPENTRY(T_XMM)
131 1.1 maxv IDTVEC_END(trap13)
132 1.1 maxv
133 1.1 maxv IDTVEC(trap14)
134 1.1 maxv IDTVEC(trap15)
135 1.1 maxv IDTVEC(trap16)
136 1.1 maxv IDTVEC(trap17)
137 1.1 maxv IDTVEC(trap18)
138 1.1 maxv IDTVEC(trap19)
139 1.1 maxv IDTVEC(trap1a)
140 1.1 maxv IDTVEC(trap1b)
141 1.1 maxv IDTVEC(trap1c)
142 1.1 maxv IDTVEC(trap1d)
143 1.1 maxv IDTVEC(trap1e)
144 1.1 maxv IDTVEC(trap1f)
145 1.1 maxv /* 20 - 31 reserved for future exp */
146 1.1 maxv ZTRAPENTRY(T_RESERVED)
147 1.1 maxv IDTVEC_END(trap1f)
148 1.1 maxv IDTVEC_END(trap1e)
149 1.1 maxv IDTVEC_END(trap1d)
150 1.1 maxv IDTVEC_END(trap1c)
151 1.1 maxv IDTVEC_END(trap1b)
152 1.1 maxv IDTVEC_END(trap1a)
153 1.1 maxv IDTVEC_END(trap19)
154 1.1 maxv IDTVEC_END(trap18)
155 1.1 maxv IDTVEC_END(trap17)
156 1.1 maxv IDTVEC_END(trap16)
157 1.1 maxv IDTVEC_END(trap15)
158 1.1 maxv IDTVEC_END(trap14)
159 1.1 maxv
160 1.1 maxv IDTVEC(exceptions)
161 1.1 maxv .quad _C_LABEL(Xtrap00), _C_LABEL(Xtrap01)
162 1.1 maxv .quad _C_LABEL(Xtrap02), _C_LABEL(Xtrap03)
163 1.1 maxv .quad _C_LABEL(Xtrap04), _C_LABEL(Xtrap05)
164 1.1 maxv .quad _C_LABEL(Xtrap06), _C_LABEL(Xtrap07)
165 1.1 maxv .quad _C_LABEL(Xtrap08), _C_LABEL(Xtrap09)
166 1.1 maxv .quad _C_LABEL(Xtrap0a), _C_LABEL(Xtrap0b)
167 1.1 maxv .quad _C_LABEL(Xtrap0c), _C_LABEL(Xtrap0d)
168 1.1 maxv .quad _C_LABEL(Xtrap0e), _C_LABEL(Xtrap0f)
169 1.1 maxv .quad _C_LABEL(Xtrap10), _C_LABEL(Xtrap11)
170 1.1 maxv .quad _C_LABEL(Xtrap12), _C_LABEL(Xtrap13)
171 1.1 maxv .quad _C_LABEL(Xtrap14), _C_LABEL(Xtrap15)
172 1.1 maxv .quad _C_LABEL(Xtrap16), _C_LABEL(Xtrap17)
173 1.1 maxv .quad _C_LABEL(Xtrap18), _C_LABEL(Xtrap19)
174 1.1 maxv .quad _C_LABEL(Xtrap1a), _C_LABEL(Xtrap1b)
175 1.1 maxv .quad _C_LABEL(Xtrap1c), _C_LABEL(Xtrap1d)
176 1.1 maxv .quad _C_LABEL(Xtrap1e), _C_LABEL(Xtrap1f)
177 1.1 maxv IDTVEC_END(exceptions)
178 1.1 maxv
179 1.1 maxv /*
180 1.1 maxv * Arguments pushed on the stack:
181 1.2 maxv * sf_trapno
182 1.2 maxv * sf_err (dummy inserted if not defined)
183 1.2 maxv * sf_rip
184 1.2 maxv * sf_cs
185 1.2 maxv * sf_rflags
186 1.2 maxv * sf_rsp
187 1.2 maxv * sf_ss
188 1.1 maxv */
189 1.1 maxv NENTRY(alltraps)
190 1.1 maxv movq %rsp,%rdi
191 1.1 maxv call _C_LABEL(trap)
192 1.1 maxv /* NOTREACHED */
193 1.1 maxv END(alltraps)
194