From bf056d5372b6375b088836dd57339d7a499fe0d6 Mon Sep 17 00:00:00 2001 From: Marcin Bukat Date: Tue, 11 Oct 2011 16:06:03 +0000 Subject: Switch to SYS mode on arm FS#12322 by me git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30741 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/imx233/crt0.S | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'firmware/target/arm/imx233/crt0.S') diff --git a/firmware/target/arm/imx233/crt0.S b/firmware/target/arm/imx233/crt0.S index abbff5816a..4ae083ccb2 100644 --- a/firmware/target/arm/imx233/crt0.S +++ b/firmware/target/arm/imx233/crt0.S @@ -126,15 +126,6 @@ remap: strhi r4, [r2], #4 bhi 1b - /* Set up some stack and munge it with 0xdeadbeef */ - ldr sp, =stackend - ldr r2, =stackbegin - ldr r3, =0xdeadbeef -1: - cmp sp, r2 - strhi r3, [r2], #4 - bhi 1b - /* Set up stack for IRQ mode */ msr cpsr_c, #0xd2 ldr sp, =irq_stack @@ -143,14 +134,25 @@ remap: msr cpsr_c, #0xd1 ldr sp, =fiq_stack - /* Let abort and undefined modes use IRQ stack */ + /* Let svc, abort and undefined modes use irq stack */ + msr cpsr_c, #0xd3 + ldr sp, =irq_stack msr cpsr_c, #0xd7 ldr sp, =irq_stack msr cpsr_c, #0xdb ldr sp, =irq_stack - /* Switch back to supervisor mode */ - msr cpsr_c, #0xd3 + /* Switch to sys mode */ + msr cpsr_c, #0xdf + + /* Set up some stack and munge it with 0xdeadbeef */ + ldr sp, =stackend + ldr r2, =stackbegin + ldr r3, =0xdeadbeef +1: + cmp sp, r2 + strhi r3, [r2], #4 + bhi 1b /* Jump to main */ mov r0, r6 @@ -173,11 +175,13 @@ undef_instr_handler: mov r1, #0 b UIE -/* We run supervisor mode most of the time, and should never see a software - * exception being thrown. Perhaps make it illegal and call UIE? */ +/* We run sys mode most of the time, and should never see a software + * exception being thrown. Make it illegal and call UIE. */ software_int_handler: reserved_handler: - movs pc, lr + sub r0, lr, #4 + mov r1, #4 + b UIE prefetch_abort_handler: sub r0, lr, #4 @@ -196,5 +200,4 @@ irq_stack: /* 256 words of FIQ stack */ .space 256*4 fiq_stack: - end: -- cgit v1.2.3