Changeset 762a824 in mainline for arch/ppc32/src/exception.S


Ignore:
Timestamp:
2006-05-01T14:44:37Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
16dad032
Parents:
0f27b4c
Message:

ppc32: proper exception handling from user-space
code cleanup

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/ppc32/src/exception.S

    r0f27b4c r762a824  
    3333
    3434.macro CONTEXT_STORE
    35         mtspr sprg1, sp
    36        
    37         subis sp, sp, 0x8000
    38        
    39         subi sp, sp, 144
     35       
     36        # save SP in SPRG1
     37        # save R12 in SPRG2, backup CR in R12
     38
     39        mtsprg1 sp
     40        mtsprg2 r12
     41        mfcr r12
     42       
     43        # check whether SP is in kernel
     44       
     45        andis. sp, sp, 0x8000
     46        bne 1f
     47       
     48                # stack is in user-space
     49               
     50                mfsprg0 sp
     51       
     52        b 2f
     53       
     54        1:
     55       
     56                # stack is in kernel
     57               
     58                mfsprg1 sp
     59                subis sp, sp, 0x8000
     60       
     61        2:
     62       
     63        subi sp, sp, 140
    4064        stw r0, 0(sp)
    4165        stw r2, 4(sp)
     
    4973        stw r10, 36(sp)
    5074        stw r11, 40(sp)
    51         stw r12, 44(sp)
    52         stw r13, 48(sp)
    53         stw r14, 52(sp)
    54         stw r15, 56(sp)
    55         stw r16, 60(sp)
    56         stw r17, 64(sp)
    57         stw r18, 68(sp)
    58         stw r19, 72(sp)
    59         stw r20, 76(sp)
    60         stw r21, 80(sp)
    61         stw r22, 84(sp)
    62         stw r23, 88(sp)
    63         stw r24, 92(sp)
    64         stw r25, 96(sp)
    65         stw r26, 100(sp)
    66         stw r27, 104(sp)
    67         stw r28, 108(sp)
    68         stw r29, 112(sp)
    69         stw r30, 116(sp)
    70         stw r31, 120(sp)
    71        
    72         mfspr r3, srr0
     75        stw r13, 44(sp)
     76        stw r14, 48(sp)
     77        stw r15, 52(sp)
     78        stw r16, 56(sp)
     79        stw r17, 60(sp)
     80        stw r18, 64(sp)
     81        stw r19, 68(sp)
     82        stw r20, 72(sp)
     83        stw r21, 76(sp)
     84        stw r22, 80(sp)
     85        stw r23, 84(sp)
     86        stw r24, 88(sp)
     87        stw r25, 92(sp)
     88        stw r26, 96(sp)
     89        stw r27, 100(sp)
     90        stw r28, 104(sp)
     91        stw r29, 108(sp)
     92        stw r30, 112(sp)
     93        stw r31, 116(sp)
     94       
     95        mfsrr0 r3
     96        stw r3, 120(sp)
     97       
     98        mfsrr1 r3
    7399        stw r3, 124(sp)
    74100       
    75         mfspr r3, srr1
     101        mflr r3
    76102        stw r3, 128(sp)
    77103       
    78         mflr r3
    79         stw r3, 132(sp)
    80        
    81         mfcr r3
     104        stw r12, 132(sp)
     105       
     106        mfctr r3
    82107        stw r3, 136(sp)
    83108       
    84         mfctr r3
     109        mfxer r3
    85110        stw r3, 140(sp)
    86        
    87         mfxer r3
    88         stw r3, 144(sp)
    89111.endm
    90112
     
    103125exc_data_storage:
    104126        CONTEXT_STORE
    105 
     127       
    106128        lis r3, pht_refill@ha
    107129        addi r3, r3, pht_refill@l
    108         mtspr srr0, r3
     130        mtsrr0 r3
    109131       
    110132        mfmsr r3
    111133        ori r3, r3, (msr_ir | msr_dr)@l
    112         mtspr srr1, r3
     134        mtsrr1 r3
    113135       
    114136        lis r3, iret@ha
     
    117139       
    118140        addis sp, sp, 0x8000
     141        mr r3, sp
    119142        rfi
    120143
     
    122145.global exc_instruction_storage
    123146exc_instruction_storage:
    124         b exc_instruction_storage
    125 
    126 .org 0x480
    127 .global exc_instruction_segment
    128 exc_instruction_segment:
    129         b exc_instruction_segment
     147        CONTEXT_STORE
     148       
     149        lis r3, pht_refill@ha
     150        addi r3, r3, pht_refill@l
     151        mtsrr0 r3
     152       
     153        mfmsr r3
     154        ori r3, r3, (msr_ir | msr_dr)@l
     155        mtsrr1 r3
     156       
     157        lis r3, iret@ha
     158        addi r3, r3, iret@l
     159        mtlr r3
     160       
     161        addis sp, sp, 0x8000
     162        mr r3, sp
     163        rfi
    130164
    131165.org 0x500
     
    156190        lis r3, exc_dispatch@ha
    157191        addi r3, r3, exc_dispatch@l
    158         mtspr srr0, r3
     192        mtsrr0 r3
    159193       
    160194        mfmsr r3
    161195        ori r3, r3, (msr_ir | msr_dr)@l
    162         mtspr srr1, r3
     196        mtsrr1 r3
    163197       
    164198        lis r3, iret@ha
     
    168202        addis sp, sp, 0x8000
    169203        li r3, 10
     204        mr r4, sp
    170205        rfi
    171206
Note: See TracChangeset for help on using the changeset viewer.