Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1276 → Rev 1277

/kernel/trunk/arch/ppc32/include/exception.h
66,12 → 66,14
__u32 r29;
__u32 r30;
__u32 r31;
__u32 cr;
__u32 pc;
__u32 srr1;
__u32 lr;
__u32 cr;
__u32 ctr;
__u32 xer;
__u32 r12;
__u32 sp;
};
 
#endif
/kernel/trunk/arch/ppc32/Makefile.inc
38,7 → 38,7
## Make some default assumptions
#
 
CFLAGS += -mcpu=powerpc -m32
CFLAGS += -mcpu=powerpc -msoft-float -m32
AFLAGS += -a32
LFLAGS += -no-check-sections -N
 
/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
/kernel/trunk/arch/ppc32/src/asm.S
32,6 → 32,7
 
.global userspace_asm
.global iret
.global iret_syscall
.global memsetb
.global memcpy
 
66,6 → 67,13
rfi
 
iret:
# disable interrupts
mfmsr r31
rlwinm r31, r31, 0, 17, 15
mtmsr r31
lwz r0, 0(sp)
lwz r2, 4(sp)
lwz r3, 8(sp)
98,26 → 106,87
lwz r31, 116(sp)
lwz r12, 120(sp)
mtcr r12
lwz r12, 124(sp)
mtsrr0 r12
lwz r12, 124(sp)
lwz r12, 128(sp)
mtsrr1 r12
lwz r12, 128(sp)
lwz r12, 132(sp)
mtlr r12
lwz r12, 132(sp)
lwz r12, 136(sp)
mtctr r12
lwz r12, 140(sp)
mtxer r12
lwz r12, 144(sp)
lwz sp, 148(sp)
rfi
 
iret_syscall:
# disable interrupts
mfmsr r31
rlwinm r31, r31, 0, 17, 15
mtmsr r31
lwz r0, 0(sp)
lwz r2, 4(sp)
lwz r4, 12(sp)
lwz r5, 16(sp)
lwz r6, 20(sp)
lwz r7, 24(sp)
lwz r8, 28(sp)
lwz r9, 32(sp)
lwz r10, 36(sp)
lwz r11, 40(sp)
lwz r13, 44(sp)
lwz r14, 48(sp)
lwz r15, 52(sp)
lwz r16, 56(sp)
lwz r17, 60(sp)
lwz r18, 64(sp)
lwz r19, 68(sp)
lwz r20, 72(sp)
lwz r21, 76(sp)
lwz r22, 80(sp)
lwz r23, 84(sp)
lwz r24, 88(sp)
lwz r25, 92(sp)
lwz r26, 96(sp)
lwz r27, 100(sp)
lwz r28, 104(sp)
lwz r29, 108(sp)
lwz r30, 112(sp)
lwz r31, 116(sp)
lwz r12, 120(sp)
mtcr r12
lwz r12, 124(sp)
mtsrr0 r12
lwz r12, 128(sp)
mtsrr1 r12
lwz r12, 132(sp)
mtlr r12
lwz r12, 136(sp)
mtctr r12
lwz r12, 140(sp)
mtxer r12
lwz r12, 144(sp)
lwz sp, 148(sp)
 
mfsprg1 sp
mfsprg2 r12
rfi
memsetb: