Subversion Repositories freemyipod

Rev

Rev 702 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 702 Rev 704
Line 23... Line 23...
23
#define ASM_FILE
23
#define ASM_FILE
24
#include "global.h"
24
#include "global.h"
25
 
25
 
26
.section .icode.contextswitch, "ax", %progbits
26
.section .icode.contextswitch, "ax", %progbits
27
.align 2
27
.align 2
28
.global panic_recover
-
 
29
.type panic_recover, %function
-
 
30
panic_recover:
-
 
31
	mrs	r0, cpsr
-
 
32
	and	r0, r0, #0x1f
-
 
33
	cmp	r0, #0x17
-
 
34
	cmpne	r0, #0x1b
-
 
35
	bne	yield
-
 
36
	ldr	sp, =_abortstackend - 0x44
-
 
37
	ldr	r9, =current_thread
-
 
38
	ldr	lr, [r9]
-
 
39
	ldmia	sp!, {r0-r7}
-
 
40
	stmia	lr!, {r0-r7}
-
 
41
	ldmia	sp!, {r0-r8}
-
 
42
	stmia	lr!, {r0-r8}
-
 
43
	msr	cpsr_c, #0xd2
-
 
44
	bl	scheduler_pause_accounting
-
 
45
	adr	lr, resume_thread
-
 
46
	mov	r0, #0
-
 
47
	mov	r1, r9
-
 
48
	b	scheduler_switch
-
 
49
.size panic_recover, .-panic_recover
-
 
50
 
-
 
51
.global yield
28
.global yield
52
.type yield, %function
29
.type yield, %function
53
yield:
30
yield:
54
	mrs	r1, cpsr
31
	mrs	r1, cpsr
55
	msr	cpsr_c, #0xdf
32
	msr	cpsr_c, #0xdf
Line 71... Line 48...
71
.type syscall_handler, %function
48
.type syscall_handler, %function
72
syscall_handler:
49
syscall_handler:
73
	ldr	sp, [lr,#-4]
50
	ldr	sp, [lr,#-4]
74
	bics	sp, sp, #0xff000000
51
	bics	sp, sp, #0xff000000
75
	beq	syscall_breakpoint
52
	beq	syscall_breakpoint
-
 
53
	cmp	sp, #(swilist_end-swilist_start)/4+1
-
 
54
	bcs	unknown_swi
76
	mov	r12, lr
55
	mov	r12, lr
77
	mrs	sp, spsr
56
	mrs	sp, spsr
78
	msr	cpsr_c, sp
57
	msr	cpsr_c, sp
79
	mov	lr, r12
58
	mov	lr, r12
80
	ldr	r12, [lr,#-4]
59
	ldr	r12, [lr,#-4]
81
	bic	r12, r12, #0xff000000
60
	bic	r12, r12, #0xff000000
82
	cmp	r12, #(swilist_end-swilist_start)/4+1
-
 
83
	movcs	r0, #0
61
	sub	r12, r12, #2
84
	addcc	pc, pc, r12,lsl#2
62
	add	pc, pc, r12,lsl#2
85
	adr	r1, unknown_swi_string
-
 
86
	mov	r2, r12
-
 
87
swilist_start:
63
swilist_start:
88
	b	panicf
64
	b	panicf
89
	b	get_syscall_table
65
	b	get_syscall_table
90
swilist_end:
66
swilist_end:
91
 
67
 
Line 106... Line 82...
106
	bl	scheduler_pause_accounting
82
	bl	scheduler_pause_accounting
107
	adr	lr, resume_thread
83
	adr	lr, resume_thread
108
	mov	r0, #0
84
	mov	r0, #0
109
	mov	r1, #0
85
	mov	r1, #0
110
	b	scheduler_switch
86
	b	scheduler_switch
-
 
87
	
-
 
88
unknown_swi:
-
 
89
	ldr	sp, =_abortstackend - 0x44
-
 
90
	str	lr, [sp,#-4]
-
 
91
	mrs	lr, spsr
-
 
92
	str	lr, [sp,#-8]
-
 
93
	msr	cpsr_c, #0xdb
-
 
94
	ldr	lr, [sp,#-8]
-
 
95
	msr	spsr_all, lr
-
 
96
	ldr	lr, [sp,#-4]
-
 
97
	b	undef_instr_handler
111
.size syscall_handler, .-syscall_handler
98
.size syscall_handler, .-syscall_handler
112
 
99
 
113
.global irq_handler
100
.global irq_handler
114
.type irq_handler, %function
101
.type irq_handler, %function
115
was_in_svc_mode:
102
was_in_svc_mode:
Line 196... Line 183...
196
	mov	r0, #0
183
	mov	r0, #0
197
	mcr	p15, 0, r0,c7,c5
184
	mcr	p15, 0, r0,c7,c5
198
	bx	r1
185
	bx	r1
199
.size execfirmware, .-execfirmware
186
.size execfirmware, .-execfirmware
200
 
187
 
-
 
188
.global panic_recover
-
 
189
.type panic_recover, %function
-
 
190
panic_recover:
-
 
191
	and	r0, r0, #0x1f
-
 
192
	cmp	r0, #0x12
-
 
193
	beq	irqpanic
-
 
194
	cmp	r0, #0x17
-
 
195
	cmpne	r0, #0x1b
-
 
196
	bne	yield
-
 
197
	ldr	sp, =_abortstackend - 0x44
-
 
198
	ldr	r0, [sp,#0x40]
-
 
199
	and	r0, r0, #0x1f
-
 
200
	cmp	r0, #0x12
-
 
201
	beq	irqabort
-
 
202
	ldr	r9, =current_thread
-
 
203
	ldr	lr, [r9]
-
 
204
	ldmia	sp!, {r0-r7}
-
 
205
	stmia	lr!, {r0-r7}
-
 
206
	ldmia	sp!, {r0-r8}
-
 
207
	stmia	lr!, {r0-r8}
-
 
208
	msr	cpsr_c, #0xd2
-
 
209
	bl	scheduler_pause_accounting
-
 
210
	adr	lr, resume_thread
-
 
211
	mov	r0, #0
-
 
212
	mov	r1, r9
-
 
213
	b	scheduler_switch
-
 
214
.size panic_recover, .-panic_recover
-
 
215
 
-
 
216
irqabort:
-
 
217
	mov	r0, #CONSOLE_PANIC
-
 
218
	adr	r1, irqabort_string
-
 
219
	ldmfd	sp!, {r2,r3}
-
 
220
	bl	csprintf
-
 
221
	mov	r0, #CONSOLE_PANIC
-
 
222
	bl	csflush
-
 
223
	mov	r0, #CONSOLE_PANICDUMP
-
 
224
	adr	r1, stack_string
-
 
225
	bl	csputs
-
 
226
	add	sp, sp, #0x3c
-
 
227
	ldr	r4, [sp,#-0x10]
-
 
228
	sub	r4, r4, #0x800
-
 
229
	add	r5, r4, #0x2000
-
 
230
irqabort_stackline:
-
 
231
	mov	r0, #CONSOLE_PANICDUMP
-
 
232
	adr	r1, hexdump_string
-
 
233
	mov	r2, r4
-
 
234
	ldr	r3, [r4], #4
-
 
235
	bl	csprintf
-
 
236
	cmp	r4, r5
-
 
237
	bne	irqabort_stackline
-
 
238
	mov	r0, #CONSOLE_PANICDUMP
-
 
239
	bl	csflush
-
 
240
	b	hang
-
 
241
 
-
 
242
irqpanic:
-
 
243
	mov	r0, #CONSOLE_PANIC
-
 
244
	adr	r1, irqpanic_string
-
 
245
	bl	csputs
-
 
246
	mov	r0, #CONSOLE_PANIC
-
 
247
	bl	csflush
-
 
248
@ fallthrough
-
 
249
 
-
 
250
.global panic_fatal
-
 
251
.type panic_fatal, %function
-
 
252
panic_fatal:
-
 
253
	b	hang
-
 
254
.size panic_fatal, .-panic_fatal
-
 
255
 
-
 
256
stack_string:
-
 
257
	.ascii "Stack:\n\0"
-
 
258
	
-
 
259
hexdump_string:
-
 
260
	.ascii "%08X: %08X\n\0"
-
 
261
 
201
unknown_swi_string:
262
irqabort_string:
-
 
263
	.ascii "Exception in IRQ handler!\n"
-
 
264
	.ascii " R0: %08X  R1: %08X\n R2: %08X  R3: %08X\n"
-
 
265
	.ascii " R4: %08X  R5: %08X\n R6: %08X  R7: %08X\n"
-
 
266
	.ascii " R8: %08X  R9: %08X\nR10: %08X R11: %08X\n"
-
 
267
	.ascii "R12: %08X R13: %08X\nR14: %08X R15: %08X\n"
202
	.ascii "Unhandled SWI %06X\0"
268
	.ascii "CPSR: %08X\n\0"
-
 
269
	
-
 
270
irqpanic_string:
-
 
271
	.ascii "Panic in IRQ handler!\n\0"
-
 
272