Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1276 → Rev 1277

/kernel/trunk/arch/ppc32/src/exception.S
33,12 → 33,12
 
.macro CONTEXT_STORE
# save SP in SPRG1
# save R12 in SPRG2, backup CR in R12
# save R12 in SPRG1, backup CR in R12
# save SP in SPRG2
 
mtsprg1 sp
mtsprg2 r12
mtsprg1 r12
mfcr r12
mtsprg2 sp
# check whether SP is in kernel
55,12 → 55,12
# stack is in kernel
mfsprg1 sp
mfsprg2 sp
subis sp, sp, 0x8000
2:
subi sp, sp, 140
subi sp, sp, 148
stw r0, 0(sp)
stw r2, 4(sp)
stw r3, 8(sp)
92,24 → 92,60
stw r30, 112(sp)
stw r31, 116(sp)
mfsrr0 r3
stw r3, 120(sp)
stw r12, 120(sp)
mfsrr1 r3
stw r3, 124(sp)
mfsrr0 r12
stw r12, 124(sp)
mflr r3
stw r3, 128(sp)
mfsrr1 r12
stw r12, 128(sp)
mflr r12
stw r12, 132(sp)
mfctr r3
stw r3, 136(sp)
mfctr r12
stw r12, 136(sp)
mfxer r3
stw r3, 140(sp)
mfxer r12
stw r12, 140(sp)
mfsprg1 r12
stw r12, 144(sp)
mfsprg2 r12
stw r12, 148(sp)
.endm
 
.org 0x060
jump_to_kernel:
lis r12, iret@ha
addi r12, r12, iret@l
mtlr r12
 
mfmsr r12
ori r12, r12, (msr_ir | msr_dr)@l
mtsrr1 r12
addis sp, sp, 0x8000
mr r4, sp
rfi
 
jump_to_kernel_syscall:
lis r12, syscall_handler@ha
addi r12, r12, syscall_handler@l
mtsrr0 r12
lis r12, iret_syscall@ha
addi r12, r12, iret_syscall@l
mtlr r12
 
mfmsr r12
ori r12, r12, (msr_ir | msr_dr)@l
mtsrr1 r12
addis sp, sp, 0x8000
rfi
 
.org 0x100
.global exc_system_reset
exc_system_reset:
125,22 → 161,12
exc_data_storage:
CONTEXT_STORE
lis r3, pht_refill@ha
addi r3, r3, pht_refill@l
mtsrr0 r3
lis r12, pht_refill@ha
addi r12, r12, pht_refill@l
mtsrr0 r12
mfmsr r3
ori r3, r3, (msr_ir | msr_dr)@l
mtsrr1 r3
lis r3, iret@ha
addi r3, r3, iret@l
mtlr r3
addis sp, sp, 0x8000
li r3, 1
mr r4, sp
rfi
b jump_to_kernel
 
.org 0x400
.global exc_instruction_storage
147,22 → 173,12
exc_instruction_storage:
CONTEXT_STORE
lis r3, pht_refill@ha
addi r3, r3, pht_refill@l
mtsrr0 r3
lis r12, pht_refill@ha
addi r12, r12, pht_refill@l
mtsrr0 r12
mfmsr r3
ori r3, r3, (msr_ir | msr_dr)@l
mtsrr1 r3
lis r3, iret@ha
addi r3, r3, iret@l
mtlr r3
addis sp, sp, 0x8000
li r3, 0
mr r4, sp
rfi
b jump_to_kernel
 
.org 0x500
.global exc_external
189,22 → 205,12
exc_decrementer:
CONTEXT_STORE
 
lis r3, exc_dispatch@ha
addi r3, r3, exc_dispatch@l
mtsrr0 r3
lis r12, exc_dispatch@ha
addi r12, r12, exc_dispatch@l
mtsrr0 r12
mfmsr r3
ori r3, r3, (msr_ir | msr_dr)@l
mtsrr1 r3
lis r3, iret@ha
addi r3, r3, iret@l
mtlr r3
addis sp, sp, 0x8000
li r3, 10
mr r4, sp
rfi
b jump_to_kernel
 
.org 0xa00
.global exc_reserved0
219,7 → 225,9
.org 0xc00
.global exc_syscall
exc_syscall:
b exc_syscall
CONTEXT_STORE
b jump_to_kernel_syscall
 
.org 0xd00
.global exc_trace