fixed the stack backtrace function
This commit is contained in:
		| @ -27,6 +27,7 @@ | ||||
| #include "hcl-prv.h" | ||||
|  | ||||
| #if defined(HCL_ENABLE_LIBUNWIND) | ||||
| #	define UNW_LOCAL_ONLY | ||||
| #	include <libunwind.h> | ||||
| #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, "<unknown>"); | ||||
| 			hcl_copy_bcstr (symbol, HCL_COUNTOF(symbol), "<unknown>"); | ||||
| 		} | ||||
|  | ||||
| 		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) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user