aw-el2-barebone/exception_funcs.c
Icenowy Zheng 987e65e22a adapt to Linux environment
Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
2020-03-29 10:21:30 +08:00

121 lines
1.8 KiB
C

#include SOC_HEADER
#include "panic.h"
#include "uart.h"
#include "trapped_funcs.h"
#include <asm/ptrace.h>
static void dump_registers(struct pt_regs *pt_regs, unsigned int esr)
{
uint64_t reg;
#define PUT_PT_REG(reg) do { \
uart_puts(SOC_UART0, "\nx" #reg ": "); \
uart_hexval(SOC_UART0, pt_regs->regs[reg]); \
} while (0)
uart_puts(SOC_UART0, "\nelr: ");
uart_hexval(SOC_UART0, pt_regs->elr);
uart_puts(SOC_UART0, "\nesr: ");
uart_hexval(SOC_UART0, esr);
uart_puts(SOC_UART0, "\nfar: ");
asm volatile("mrs %0, far_el2" : "=r" (reg) : : "cc");
uart_hexval(SOC_UART0, reg);
uart_puts(SOC_UART0, "\nhpfar: ");
asm volatile("mrs %0, hpfar_el2" : "=r" (reg) : : "cc");
uart_hexval(SOC_UART0, reg);
PUT_PT_REG(0);
PUT_PT_REG(1);
PUT_PT_REG(2);
PUT_PT_REG(3);
PUT_PT_REG(4);
PUT_PT_REG(5);
PUT_PT_REG(6);
PUT_PT_REG(7);
PUT_PT_REG(8);
PUT_PT_REG(9);
PUT_PT_REG(10);
PUT_PT_REG(11);
PUT_PT_REG(12);
PUT_PT_REG(13);
PUT_PT_REG(14);
PUT_PT_REG(15);
PUT_PT_REG(16);
PUT_PT_REG(17);
PUT_PT_REG(18);
PUT_PT_REG(19);
PUT_PT_REG(20);
PUT_PT_REG(21);
PUT_PT_REG(22);
PUT_PT_REG(23);
PUT_PT_REG(24);
PUT_PT_REG(25);
PUT_PT_REG(26);
PUT_PT_REG(27);
PUT_PT_REG(28);
PUT_PT_REG(29);
PUT_PT_REG(30);
uart_puts(SOC_UART0, "\n");
#undef PUT_PT_REG
}
void do_sync()
{
panic(__func__);
}
void do_irq()
{
panic(__func__);
}
void do_fiq()
{
panic(__func__);
}
void do_error()
{
panic(__func__);
}
void do_bad_sync()
{
panic(__func__);
}
void do_bad_irq()
{
panic(__func__);
}
void do_bad_fiq()
{
panic(__func__);
}
void do_bad_error()
{
panic(__func__);
}
void do_low_sync(struct pt_regs *pt_regs, unsigned int esr)
{
if (!process_low_sync(pt_regs, esr)) {
dump_registers(pt_regs, esr);
panic(__func__);
}
}
void do_low_irq()
{
panic(__func__);
}
void do_low_fiq()
{
panic(__func__);
}
void do_low_error()
{
panic(__func__);
}