source: mainline/kernel/arch/ppc32/src/exception.S@ 1e241723

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 1e241723 was 896ad9f, checked in by Martin Decky <martin@…>, 17 years ago

use pseudorandom generator to avoid even the longest path of livelock collisions

  • Property mode set to 100644
File size: 5.3 KB
Line 
1#
2# Copyright (c) 2006 Martin Decky
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8#
9# - Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer.
11# - Redistributions in binary form must reproduce the above copyright
12# notice, this list of conditions and the following disclaimer in the
13# documentation and/or other materials provided with the distribution.
14# - The name of the author may not be used to endorse or promote products
15# derived from this software without specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27#
28
29#include <arch/asm/regname.h>
30#include <arch/mm/page.h>
31
32.section K_UNMAPPED_TEXT_START, "ax"
33
34.macro CONTEXT_STORE
35
36 # save R12 in SPRG1, backup CR in R12
37 # save SP in SPRG2
38
39 mtsprg1 r12
40 mfcr r12
41 mtsprg2 sp
42
43 # check whether SP is in kernel
44
45 andis. sp, sp, 0x8000
46 bne 1f
47
48 # stack is in user-space
49
50 mfsprg0 sp
51
52 b 2f
53
54 1:
55
56 # stack is in kernel
57
58 mfsprg2 sp
59 subis sp, sp, 0x8000
60
61 2:
62
63 subi sp, sp, 164
64 stw r0, 8(sp)
65 stw r2, 12(sp)
66 stw r3, 16(sp)
67 stw r4, 20(sp)
68 stw r5, 24(sp)
69 stw r6, 28(sp)
70 stw r7, 32(sp)
71 stw r8, 36(sp)
72 stw r9, 40(sp)
73 stw r10, 44(sp)
74 stw r11, 48(sp)
75 stw r13, 52(sp)
76 stw r14, 56(sp)
77 stw r15, 60(sp)
78 stw r16, 64(sp)
79 stw r17, 68(sp)
80 stw r18, 72(sp)
81 stw r19, 76(sp)
82 stw r20, 80(sp)
83 stw r21, 84(sp)
84 stw r22, 88(sp)
85 stw r23, 92(sp)
86 stw r24, 96(sp)
87 stw r25, 100(sp)
88 stw r26, 104(sp)
89 stw r27, 108(sp)
90 stw r28, 112(sp)
91 stw r29, 116(sp)
92 stw r30, 120(sp)
93 stw r31, 124(sp)
94
95 stw r12, 128(sp)
96
97 mfsrr0 r12
98 stw r12, 132(sp)
99
100 mfsrr1 r12
101 stw r12, 136(sp)
102
103 mflr r12
104 stw r12, 140(sp)
105
106 mfctr r12
107 stw r12, 144(sp)
108
109 mfxer r12
110 stw r12, 148(sp)
111
112 mfdar r12
113 stw r12, 152(sp)
114
115 mfsprg1 r12
116 stw r12, 156(sp)
117
118 mfsprg2 r12
119 stw r12, 160(sp)
120.endm
121
122.org 0x100
123.global exc_system_reset
124exc_system_reset:
125 CONTEXT_STORE
126
127 li r3, 0
128 b jump_to_kernel
129
130.org 0x200
131.global exc_machine_check
132exc_machine_check:
133 CONTEXT_STORE
134
135 li r3, 1
136 b jump_to_kernel
137
138.org 0x300
139.global exc_data_storage
140exc_data_storage:
141 CONTEXT_STORE
142
143 b data_storage
144
145.org 0x400
146.global exc_instruction_storage
147exc_instruction_storage:
148 CONTEXT_STORE
149
150 b instruction_storage
151
152.org 0x500
153.global exc_external
154exc_external:
155 CONTEXT_STORE
156
157 li r3, 4
158 b jump_to_kernel
159
160.org 0x600
161.global exc_alignment
162exc_alignment:
163 CONTEXT_STORE
164
165 li r3, 5
166 b jump_to_kernel
167
168.org 0x700
169.global exc_program
170exc_program:
171 CONTEXT_STORE
172
173 li r3, 6
174 b jump_to_kernel
175
176.org 0x800
177.global exc_fp_unavailable
178exc_fp_unavailable:
179 CONTEXT_STORE
180
181 li r3, 7
182 b jump_to_kernel
183
184.org 0x900
185.global exc_decrementer
186exc_decrementer:
187 CONTEXT_STORE
188
189 li r3, 8
190 b jump_to_kernel
191
192.org 0xa00
193.global exc_reserved0
194exc_reserved0:
195 CONTEXT_STORE
196
197 li r3, 9
198 b jump_to_kernel
199
200.org 0xb00
201.global exc_reserved1
202exc_reserved1:
203 CONTEXT_STORE
204
205 li r3, 10
206 b jump_to_kernel
207
208.org 0xc00
209.global exc_syscall
210exc_syscall:
211 CONTEXT_STORE
212
213 b jump_to_kernel_syscall
214
215.org 0xd00
216.global exc_trace
217exc_trace:
218 CONTEXT_STORE
219
220 li r3, 12
221 b jump_to_kernel
222
223.org 0x4000
224data_storage:
225 li r3, 2
226 mr r4, sp
227 addi r4, r4, 8
228 bl pht_refill_real
229
230 cmpwi r3, 0
231 bne iret_real
232
233 li r3, 2
234 b jump_to_kernel
235
236instruction_storage:
237 li r3, 3
238 mr r4, sp
239 addi r4, r4, 8
240 bl pht_refill_real
241
242 cmpwi r3, 0
243 bne iret_real
244
245 li r3, 3
246 b jump_to_kernel
247
248jump_to_kernel:
249 lis r12, iret@ha
250 addi r12, r12, iret@l
251 mtlr r12
252
253 lis r12, exc_dispatch@ha
254 addi r12, r12, exc_dispatch@l
255 mtsrr0 r12
256
257 mfmsr r12
258 ori r12, r12, (msr_ir | msr_dr)@l
259 mtsrr1 r12
260
261 addis sp, sp, 0x8000
262 mr r4, sp
263 addi r4, r4, 8
264
265 rfi
266
267jump_to_kernel_syscall:
268 lis r12, syscall_handler@ha
269 addi r12, r12, syscall_handler@l
270 mtsrr0 r12
271
272 lis r12, iret_syscall@ha
273 addi r12, r12, iret_syscall@l
274 mtlr r12
275
276 mfmsr r12
277 ori r12, r12, (msr_ir | msr_dr)@l
278 mtsrr1 r12
279
280 addis sp, sp, 0x8000
281 rfi
282
283iret_real:
284 lwz r0, 8(sp)
285 lwz r2, 12(sp)
286 lwz r3, 16(sp)
287 lwz r4, 20(sp)
288 lwz r5, 24(sp)
289 lwz r6, 28(sp)
290 lwz r7, 32(sp)
291 lwz r8, 36(sp)
292 lwz r9, 40(sp)
293 lwz r10, 44(sp)
294 lwz r11, 48(sp)
295 lwz r13, 52(sp)
296 lwz r14, 56(sp)
297 lwz r15, 60(sp)
298 lwz r16, 64(sp)
299 lwz r17, 68(sp)
300 lwz r18, 72(sp)
301 lwz r19, 76(sp)
302 lwz r20, 80(sp)
303 lwz r21, 84(sp)
304 lwz r22, 88(sp)
305 lwz r23, 92(sp)
306 lwz r24, 96(sp)
307 lwz r25, 100(sp)
308 lwz r26, 104(sp)
309 lwz r27, 108(sp)
310 lwz r28, 112(sp)
311 lwz r29, 116(sp)
312 lwz r30, 120(sp)
313 lwz r31, 124(sp)
314
315 lwz r12, 128(sp)
316 mtcr r12
317
318 lwz r12, 132(sp)
319 mtsrr0 r12
320
321 lwz r12, 136(sp)
322 mtsrr1 r12
323
324 lwz r12, 140(sp)
325 mtlr r12
326
327 lwz r12, 144(sp)
328 mtctr r12
329
330 lwz r12, 148(sp)
331 mtxer r12
332
333 lwz r12, 156(sp)
334 lwz sp, 160(sp)
335
336 rfi
Note: See TracBrowser for help on using the repository browser.