Print this page
armv6: bop_panic should hexdump the stack
It's the little things that make debugging easier.
*** 32,41 ****
--- 32,42 ----
#include <sys/bootstat.h>
#include <sys/privregs.h>
#include <sys/cpu_asm.h>
#include <sys/boot_mmu.h>
#include <sys/elf.h>
+ #include <sys/archsystm.h>
static bootops_t bootop;
/*
* Debugging help
*** 111,124 ****
char *bp_value;
} bootprop_t;
static bootprop_t *bprops = NULL;
void
bop_panic(const char *msg)
{
! bop_printf(NULL, "ARM bop_panic:\n%s\nSpinning Forever...", msg);
for (;;)
;
}
/*
--- 112,156 ----
char *bp_value;
} bootprop_t;
static bootprop_t *bprops = NULL;
+ static void
+ hexdump_stack()
+ {
+ extern char t0stack[];
+
+ uint8_t *start = (uint8_t *)t0stack;
+ uint8_t *end = start + DEFAULTSTKSZ;
+ uint8_t *ptr;
+ int i;
+
+ bop_printf(NULL, "stack (fp = %x):\n", getfp());
+
+ ptr = (uint8_t *)(getfp() & ~0xf);
+ if (ptr <= start || ptr >= end)
+ ptr = start;
+
+ while (ptr < end) {
+ uint32_t *tmp = (uint32_t *)ptr;
+
+ bop_printf(NULL, "%p: %08x %08x %08x %08x\n", ptr,
+ tmp[0], tmp[1], tmp[2], tmp[3]);
+
+ ptr += 16;
+ }
+
+ }
+
void
bop_panic(const char *msg)
{
! bop_printf(NULL, "ARM bop_panic:\n%s\n", msg);
!
! hexdump_stack();
!
! bop_printf(NULL, "Spinning Forever...", msg);
for (;;)
;
}
/*