diff --git a/lib/err.c b/lib/err.c index 3c71df1..9f6e05d 100644 --- a/lib/err.c +++ b/lib/err.c @@ -27,6 +27,7 @@ #include "hcl-prv.h" #if defined(HCL_ENABLE_LIBUNWIND) +# define UNW_LOCAL_ONLY # include #endif @@ -484,28 +485,27 @@ static void backtrace_stack_frames (hcl_t* hcl) { unw_cursor_t cursor; unw_context_t context; + int n; unw_getcontext(&context); unw_init_local(&cursor, &context); - int n=0; - while (unw_step(&cursor)) + for (n = 0; unw_step(&cursor) > 0; n++) { unw_word_t ip, sp, off; + char symbol[256]; unw_get_reg (&cursor, UNW_REG_IP, &ip); unw_get_reg (&cursor, UNW_REG_SP, &sp); - char symbol[256]; - - if (!unw_get_proc_name(&cursor, symbol, HCL_COUNTOF(symbol), &off)) + if (unw_get_proc_name(&cursor, symbol, HCL_COUNTOF(symbol), &off)) { - hcl_copy_bcstr (symbol, ""); + hcl_copy_bcstr (symbol, HCL_COUNTOF(symbol), ""); } hcl_logbfmt (hcl, HCL_LOG_UNTYPED | HCL_LOG_DEBUG, - "#%-2d 0x%016p p=0x%016p %s + 0x%zu\n", - ++n, (void*)ip, (void*)sp, symbol, (hcl_oow_t)off); + "#%02d ip=0x%*p sp=0x%*p %s+0x%zu\n", + n, HCL_SIZEOF(void*) * 2, (void*)ip, HCL_SIZEOF(void*) * 2, (void*)sp, symbol, (hcl_oow_t)off); } } #elif defined(HAVE_BACKTRACE)