mirror of
https://github.com/Icenowy/aw-el2-barebone.git
synced 2025-04-19 10:54:38 +00:00
121 lines
1.8 KiB
C
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__);
|
|
}
|