File tree Expand file tree Collapse file tree 3 files changed +44
-6
lines changed Expand file tree Collapse file tree 3 files changed +44
-6
lines changed Original file line number Diff line number Diff line change @@ -238,10 +238,23 @@ HardFault_Handler:
238
238
MRS r0 , psp / * get fault context from thread. * /
239
239
_get_sp_done:
240
240
241
+ #if defined (__VFP_FP__) && !defined(__SOFTFP__)
242
+ TST lr , # 0x10 / * if(!EXC_RETURN [ 4 ] ) * /
243
+ IT EQ
244
+ VSTMDBEQ r0! , {d8 - d15} / * push FPU register s16~s31 * /
245
+ #endif
246
+
241
247
STMFD r0! , {r4 - r11 } / * push r4 - r11 register * /
248
+
242
249
#if defined (__VFP_FP__) && !defined(__SOFTFP__)
243
- STMFD r0! , {lr} / * push dummy for flag * /
250
+ MOV r4 , # 0x00 / * flag = 0 * /
251
+
252
+ TST lr , # 0x10 / * if(!EXC_RETURN [ 4 ] ) * /
253
+ IT EQ
254
+ MOVEQ r4 , # 0x01 / * flag = 1 * /
255
+ STMFD r0! , {r4} / * push flag * /
244
256
#endif
257
+
245
258
STMFD r0! , {lr} / * push exec_return register * /
246
259
247
260
TST lr , # 0x04 / * if(!EXC_RETURN [ 2 ] ) * /
Original file line number Diff line number Diff line change @@ -237,14 +237,28 @@ HardFault_Handler:
237
237
MRS r0 , psp ; get fault context from thread.
238
238
_get_sp_done
239
239
240
+ #if defined ( __ARMVFP__ )
241
+ TST lr , # 0x10 ; if(!EXC_RETURN[4])
242
+ BNE skip_push_fpu
243
+ VSTMDB r0! , {d8 - d15} ; push FPU register s16~s31
244
+ skip_push_fpu
245
+ #endif
246
+
240
247
STMFD r0! , {r4 - r11 } ; push r4 - r11 register
241
- ;STMFD r0!, {lr} ; push exec_return register
248
+
242
249
#if defined ( __ARMVFP__ )
243
- SUB r0 , r0 , # 0x04 ; push dummy for flag
244
- STR lr , [ r0 ]
250
+ MOV r4 , # 0x00 ; flag = 0
251
+
252
+ TST lr , # 0x10 ; if(!EXC_RETURN[4])
253
+ BNE push_flag
254
+ MOV r4 , # 0x01 ; flag = 1
255
+ push_flag
256
+ SUB r0 , r0 , # 0x04
257
+ STR r4 , [ r0 ] ; push flag
245
258
#endif
259
+
246
260
SUB r0 , r0 , # 0x04
247
- STR lr , [ r0 ]
261
+ STR lr , [ r0 ] ; push exec_return register
248
262
249
263
TST lr , # 0x04 ; if(!EXC_RETURN[2])
250
264
BEQ _update_msp
Original file line number Diff line number Diff line change @@ -236,10 +236,21 @@ HardFault_Handler PROC
236
236
MRSEQ r0 , msp ; [2]=0 ==> Z=1, get fault context from handler.
237
237
MRSNE r0 , psp ; [2]=1 ==> Z=0, get fault context from thread.
238
238
239
+ IF {FPU} != "SoftVFP"
240
+ TST lr , # 0x10 ; if(!EXC_RETURN[4])
241
+ VSTMFDEQ r0! , {d8 - d15} ; push FPU register s16~s31
242
+ ENDIF
243
+
239
244
STMFD r0! , {r4 - r11 } ; push r4 - r11 register
245
+
240
246
IF {FPU} != "SoftVFP"
241
- STMFD r0! , {lr} ; push dummy for flag
247
+ MOV r4 , # 0x00 ; flag = 0
248
+
249
+ TST lr , # 0x10 ; if(!EXC_RETURN[4])
250
+ MOVEQ r4 , # 0x01 ; flag = 1
251
+ STMFD r0! , {r4} ; push flag
242
252
ENDIF
253
+
243
254
STMFD r0! , {lr} ; push exec_return register
244
255
245
256
TST lr , # 0x04 ; if(!EXC_RETURN[2])
You can’t perform that action at this time.
0 commit comments