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