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 (;;) ; } /*