diff options
author | Marcin Bukat <marcin.bukat@gmail.com> | 2011-10-11 16:06:03 +0000 |
---|---|---|
committer | Marcin Bukat <marcin.bukat@gmail.com> | 2011-10-11 16:06:03 +0000 |
commit | bf056d5372b6375b088836dd57339d7a499fe0d6 (patch) | |
tree | 0e8b2d2f9782b3267b289f8c9715e6a6cb42660d /firmware/target/arm/s3c2440 | |
parent | 90559156450082628ab1b3aed3d2db862de377c1 (diff) | |
download | rockbox-bf056d5372b6375b088836dd57339d7a499fe0d6.tar.gz rockbox-bf056d5372b6375b088836dd57339d7a499fe0d6.tar.bz2 rockbox-bf056d5372b6375b088836dd57339d7a499fe0d6.zip |
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
Diffstat (limited to 'firmware/target/arm/s3c2440')
-rw-r--r-- | firmware/target/arm/s3c2440/crt0.S | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/firmware/target/arm/s3c2440/crt0.S b/firmware/target/arm/s3c2440/crt0.S index faa54313e7..8cbd8ab91e 100644 --- a/firmware/target/arm/s3c2440/crt0.S +++ b/firmware/target/arm/s3c2440/crt0.S @@ -527,32 +527,34 @@ bsszero: cmp r3, r2 strhi r4, [r2], #4 bhi bsszero - - /* Set up some stack and munge it with 0xdeadbeef */ - ldr sp, =stackend - mov r3, sp - ldr r2, =stackbegin - ldr r4, =0xdeadbeef -stackmunge: - cmp r3, r2 - strhi r4, [r2], #4 - bhi stackmunge - /* Set up stack for IRQ mode */ + /* Set up stack for IRQ mode */ msr cpsr_c, #0xd2 ldr sp, =irq_stack /* Set up stack for FIQ mode */ 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 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 + mov r3, sp + ldr r2, =stackbegin + ldr r4, =0xdeadbeef +stackmunge: + cmp r3, r2 + strhi r4, [r2], #4 + bhi stackmunge /* Start the main function */ ldr lr, =vectors @@ -573,12 +575,14 @@ 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 @@ -749,4 +753,3 @@ irq_stack: /* 256 words of FIQ stack */ .space 256*4 fiq_stack: - |