mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-11-09 22:56:35 +00:00
Fix exception handlers (thanks @fincs)
This commit is contained in:
parent
43d1816ac2
commit
ea2693dd2d
2 changed files with 10 additions and 9 deletions
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
Loading…
Reference in a new issue