summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/shared/abort/abort.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/arm/shared/abort/abort.c')
-rw-r--r--c/src/lib/libbsp/arm/shared/abort/abort.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/c/src/lib/libbsp/arm/shared/abort/abort.c b/c/src/lib/libbsp/arm/shared/abort/abort.c
index 3bd704c32e..123fda0f7e 100644
--- a/c/src/lib/libbsp/arm/shared/abort/abort.c
+++ b/c/src/lib/libbsp/arm/shared/abort/abort.c
@@ -63,7 +63,7 @@ char *_print_full_context_mode2txt[0x20]={
void _print_full_context(uint32_t spsr)
{
char *mode;
- uint32_t prev_sp,prev_lr,cpsr,tmp;
+ uint32_t prev_sp,prev_lr,cpsr,arm_switch_reg;
int i;
printk("active thread thread 0x%08x\n", _Thread_Executing->Object.id);
@@ -71,14 +71,16 @@ void _print_full_context(uint32_t spsr)
mode=_print_full_context_mode2txt[spsr&0x1f];
if(!mode) mode="unknown";
- asm volatile (" MRS %[cpsr], cpsr \n"
- " ORR %[tmp], %[spsr], #0xc0 \n"
- " MSR cpsr_c, %[tmp] \n"
+ asm volatile (ARM_SWITCH_TO_ARM
+ " MRS %[cpsr], cpsr \n"
+ " ORR %[arm_switch_reg], %[spsr], #0xc0 \n"
+ " MSR cpsr_c, %[arm_switch_reg] \n"
" MOV %[prev_sp], sp \n"
" MOV %[prev_lr], lr \n"
" MSR cpsr_c, %[cpsr] \n"
- : [prev_sp] "=&r" (prev_sp), [prev_lr] "=&r" (prev_lr),
- [cpsr] "=&r" (cpsr), [tmp] "=&r" (tmp)
+ ARM_SWITCH_BACK
+ : [arm_switch_reg] "=&r" (arm_switch_reg), [prev_sp] "=&r" (prev_sp), [prev_lr] "=&r" (prev_lr),
+ [cpsr] "=&r" (cpsr)
: [spsr] "r" (spsr)
: "cc");