diff --git a/fusee/fusee-primary/src/exception_handlers.c b/fusee/fusee-primary/src/exception_handlers.c index fb6dcda29..0ae4835cf 100644 --- a/fusee/fusee-primary/src/exception_handlers.c +++ b/fusee/fusee-primary/src/exception_handlers.c @@ -37,10 +37,11 @@ void exception_handler_main(uint32_t *registers, unsigned int exception_type) { uint32_t instr_addr = pc + ((cpsr & 0x20) ? 2 : 4) - CODE_DUMP_SIZE; - code_dump_size =0;// safecpy(code_dump, (const void *)instr_addr, CODE_DUMP_SIZE); - stack_dump_size = safecpy(stack_dump, (const void *)registers[14], STACK_DUMP_SIZE); - printk("Something went wrong...\n"); + + code_dump_size = safecpy(code_dump, (const void *)instr_addr, CODE_DUMP_SIZE); + stack_dump_size = safecpy(stack_dump, (const void *)registers[13], STACK_DUMP_SIZE); + printk("\nException type: %s\n", exception_names[exception_type]); printk("\nRegisters:\n\n"); @@ -55,6 +56,7 @@ void exception_handler_main(uint32_t *registers, unsigned int exception_type) { printk("\nCode dump:\n"); hexdump(code_dump, code_dump_size, instr_addr); printk("\nStack dump:\n"); - hexdump(stack_dump, stack_dump_size, registers[14]); + hexdump(stack_dump, stack_dump_size, registers[13]); + printk("\n"); fatal_error("An exception occured!\n"); } diff --git a/fusee/fusee-primary/src/exception_handlers_asm.s b/fusee/fusee-primary/src/exception_handlers_asm.s index cde577de0..291b663ff 100644 --- a/fusee/fusee-primary/src/exception_handlers_asm.s +++ b/fusee/fusee-primary/src/exception_handlers_asm.s @@ -55,12 +55,10 @@ _exception_handler_data_abort: /* Mask interrupts (abort mode). */ msr cpsr_cx, #0xD7 - adr sp, safecpy - add sp, sp, #8 + adr sp, safecpy+8 cmp lr, sp blo _exception_handler_data_abort_normal - adr sp, _safecpy_end - add sp, sp, #8 + adr sp, _safecpy_end+8 cmp lr, sp bhs _exception_handler_data_abort_normal @@ -87,7 +85,8 @@ safecpy: _safecpy_loop_end: mov r0, r3 - pop {r4, pc} + pop {r4, lr} + bx lr /* Need to do that separately on ARMv4. */ _safecpy_end: