diff options
Diffstat (limited to 'c/src/lib/libbsp/arm/shared/abort/abort.c')
-rw-r--r-- | c/src/lib/libbsp/arm/shared/abort/abort.c | 14 |
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"); |