Changeset a35b458 in mainline for kernel/arch/ppc32/src/exception.S
- Timestamp:
- 2018-03-02T20:10:49Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ppc32/src/exception.S
r3061bc1 ra35b458 38 38 39 39 .macro CONTEXT_STORE 40 40 41 41 # save r12 in SPRG1, backup CR in r12 42 42 # save SP in SPRG2 43 43 44 44 mtsprg1 r12 45 45 mfcr r12 46 46 mtsprg2 sp 47 47 48 48 # check whether the previous mode was user or kernel 49 49 50 50 mfsrr1 sp # use sp as a temporary register to hold SRR1 51 51 andi. sp, sp, MSR_PR 52 52 bne 1f 53 53 # previous mode was kernel 54 54 55 55 mfsprg2 sp 56 56 subis sp, sp, 0x8000 57 57 b 2f 58 58 59 59 1: 60 60 # previous mode was user 61 61 62 62 mfsprg0 sp 63 63 2: 64 64 65 65 subi sp, sp, ALIGN_UP(ISTATE_SIZE, STACK_ALIGNMENT) 66 66 stw r0, ISTATE_OFFSET_R0(sp) … … 94 94 stw r30, ISTATE_OFFSET_R30(sp) 95 95 stw r31, ISTATE_OFFSET_R31(sp) 96 96 97 97 stw r12, ISTATE_OFFSET_CR(sp) 98 98 99 99 mfsrr0 r12 100 100 stw r12, ISTATE_OFFSET_PC(sp) 101 101 102 102 mfsrr1 r12 103 103 stw r12, ISTATE_OFFSET_SRR1(sp) 104 104 105 105 mflr r12 106 106 stw r12, ISTATE_OFFSET_LR(sp) 107 107 108 108 mfctr r12 109 109 stw r12, ISTATE_OFFSET_CTR(sp) 110 110 111 111 mfxer r12 112 112 stw r12, ISTATE_OFFSET_XER(sp) 113 113 114 114 mfdar r12 115 115 stw r12, ISTATE_OFFSET_DAR(sp) 116 116 117 117 mfsprg1 r12 118 118 stw r12, ISTATE_OFFSET_R12(sp) 119 119 120 120 mfsprg2 r12 121 121 stw r12, ISTATE_OFFSET_SP(sp) … … 129 129 SYMBOL(exc_system_reset) 130 130 CONTEXT_STORE 131 131 132 132 li r3, 0 133 133 b jump_to_kernel … … 136 136 SYMBOL(exc_machine_check) 137 137 CONTEXT_STORE 138 138 139 139 li r3, 1 140 140 b jump_to_kernel … … 143 143 SYMBOL(exc_data_storage) 144 144 CONTEXT_STORE 145 145 146 146 li r3, 2 147 147 b jump_to_kernel … … 150 150 SYMBOL(exc_instruction_storage) 151 151 CONTEXT_STORE 152 152 153 153 li r3, 3 154 154 b jump_to_kernel … … 157 157 SYMBOL(exc_external) 158 158 CONTEXT_STORE 159 159 160 160 li r3, 4 161 161 b jump_to_kernel … … 164 164 SYMBOL(exc_alignment) 165 165 CONTEXT_STORE 166 166 167 167 li r3, 5 168 168 b jump_to_kernel … … 171 171 SYMBOL(exc_program) 172 172 CONTEXT_STORE 173 173 174 174 li r3, 6 175 175 b jump_to_kernel … … 178 178 SYMBOL(exc_fp_unavailable) 179 179 CONTEXT_STORE 180 180 181 181 li r3, 7 182 182 b jump_to_kernel … … 185 185 SYMBOL(exc_decrementer) 186 186 CONTEXT_STORE 187 187 188 188 li r3, 8 189 189 b jump_to_kernel … … 192 192 SYMBOL(exc_reserved0) 193 193 CONTEXT_STORE 194 194 195 195 li r3, 9 196 196 b jump_to_kernel … … 199 199 SYMBOL(exc_reserved1) 200 200 CONTEXT_STORE 201 201 202 202 li r3, 10 203 203 b jump_to_kernel … … 206 206 SYMBOL(exc_syscall) 207 207 CONTEXT_STORE 208 208 209 209 b jump_to_kernel_syscall 210 210 … … 212 212 SYMBOL(exc_trace) 213 213 CONTEXT_STORE 214 214 215 215 li r3, 12 216 216 b jump_to_kernel … … 219 219 SYMBOL(exc_itlb_miss) 220 220 CONTEXT_STORE 221 221 222 222 li r3, 13 223 223 b jump_to_kernel … … 226 226 SYMBOL(exc_dtlb_miss_load) 227 227 CONTEXT_STORE 228 228 229 229 li r3, 14 230 230 b jump_to_kernel … … 233 233 SYMBOL(exc_dtlb_miss_store) 234 234 CONTEXT_STORE 235 235 236 236 li r3, 15 237 237 b jump_to_kernel … … 244 244 # Previous mode was kernel. 245 245 # We can construct a proper frame linkage. 246 246 247 247 mfsrr0 r12 248 248 stw r12, ISTATE_OFFSET_LR_FRAME(sp) … … 265 265 ori r12, r12, (MSR_IR | MSR_DR) 266 266 mtsrr1 r12 267 267 268 268 addis sp, sp, 0x8000 269 269 mr r4, sp 270 270 271 271 rfi 272 272 … … 275 275 addi r12, r12, syscall_handler@l 276 276 mtsrr0 r12 277 277 278 278 lis r12, iret_syscall@ha 279 279 addi r12, r12, iret_syscall@l … … 286 286 ori r12, r12, (MSR_IR | MSR_DR | MSR_EE) 287 287 mtsrr1 r12 288 288 289 289 addis sp, sp, 0x8000 290 290 rfi
Note:
See TracChangeset
for help on using the changeset viewer.