Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev HEAD → Rev 2294

/branches/arm/kernel/arch/arm32/src/start.S
32,49 → 32,55
 
.global kernel_image_start
.global exc_stack
.global exc_stack
.global supervisor_sp
 
 
kernel_image_start:
#switch to system mode
mrs r3, cpsr
orr r3, r3, #0x1f
msr cpsr_c, r3
ldr sp, =end_stack
 
# initialize Stack pointer for exception modes
mrs r4, cpsr
bic r4, r4, #0x1f
cmp r2, #0
beq bootinfo_end
 
#FIQ Mode
orr r3, r4, #0x11
msr cpsr_c, r3
ldr sp, =exc_stack
ldr r3, =bootinfo
 
#IRQ Mode
orr r3, r4, #0x12
msr cpsr_c, r3
ldr sp, =exc_stack
bootinfo_loop:
ldr r4, [r1]
str r4, [r3]
 
#ABORT Mode
orr r3, r4, #0x17
msr cpsr_c, r3
ldr sp, =exc_stack
add r1, r1, #4
add r3, r3, #4
add r2, r2, #-4
 
#UNDEFINED Mode
orr r3, r4, #0x1b
msr cpsr_c, r3
ldr sp, =exc_stack
cmp r2, #0
bne bootinfo_loop
bootinfo_end:
 
# switch to supervisor mode
orr r3, r4, #0x13
msr cpsr_c, r3
ldr sp, =temp_stack
bl arch_pre_main
 
bl main_bsp
 
b halt
 
 
.space TEMP_STACK_SIZE
temp_stack:
 
end_stack:
.space 1024
exc_stack:
 
.space 4
supervisor_sp:
.space 4
 
.space 4
halt:
ldr r0,=0x10000010
ldr r1, [r0]
b halt