13#define CPU_STACK_TRACE_DEPTH 10
15static char text[4096]=
"\0";
22static int ptr_seems_valid(
void * p){
23 return (
u32)p>=0x80000000 && (
u32)p<0xa0000000;
27static void _cpu_print_stack(
void *pc,
void *
lr,
void *r1)
35 if (!ptr_seems_valid(p))
return;
37 sprintf(text,
"%s\nSTACK DUMP:",text);
40 if(i%4) sprintf(text,
"%s --> ",text);
42 if(i>0) sprintf(text,
"%s -->\n",text);
43 else sprintf(text,
"%s\n",text);
48 if(pc) sprintf(text,
"%s%p",text,pc);
51 sprintf(text,
"%s%p",text,(
void*)l);
54 if(p && p->
up) sprintf(text,
"%s%p",text,(
u32)(p->
up->
lr));
60static void flush_console()
81 sprintf(text,
"\nException vector! (%p)\n\n",exception);
83 strcpy(text,
"\nSegmentation fault!\n\n");
88 sprintf(text,
"%spir=%016llx dar=%016llx\nsr0=%016llx sr1=%016llx lr=%016llx\n\n",
89 text,context[39],context[38],context[36],context[37],context[32]);
95 sprintf(text,
"%s%02d=%016llx %02d=%016llx %02d=%016llx %02d=%016llx\n",
96 text,i,context[i],i+8,context[i+8],i+16,context[i+16],i+24,context[i+24]);
100 _cpu_print_stack((
void*)(
u32)context[36],(
void*)(
u32)context[32],(
void*)(
u32)context[1]);
102 strcat(text,
"\n\nOn uart: 'x'=Xell, 'h'=Halt, 'r'=Reboot\n\n");
struct _framerec * frame_rec_t
void crashdump(u32 exception, u64 *context)
#define CPU_STACK_TRACE_DEPTH
struct _framerec frame_rec
void console_set_colors(unsigned int background, unsigned int foreground)
void console_putch(const char c)
void xenon_smc_power_reboot(void)
void xenon_smc_power_shutdown(void)
void putch(unsigned char c)
int xenos_is_initialized()
void xenos_init(int videoMode)
uint64_t u64
64bit unsigned integer
uint32_t u32
32bit unsigned integer