From b7e8928005079171c7595fd336a76f655daed48a Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 10 May 2026 13:37:34 +0200 Subject: Improvements to libtest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- libtest/libtest_print_backtrace.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'libtest/libtest_print_backtrace.c') diff --git a/libtest/libtest_print_backtrace.c b/libtest/libtest_print_backtrace.c index 8fa0fd5..e595131 100644 --- a/libtest/libtest_print_backtrace.c +++ b/libtest/libtest_print_backtrace.c @@ -9,7 +9,8 @@ void -libtest_print_backtrace(FILE *fp, const char *indent, size_t first, const struct backtrace *backtrace) +libtest_print_backtrace(FILE *fp, const char *prefix, const char *indent, size_t first, + const struct backtrace *backtrace, ucontext_t *ucontext) { static _Thread_local int recursion_guard = 0; int saved_errno; @@ -35,7 +36,21 @@ libtest_print_backtrace(FILE *fp, const char *indent, size_t first, const struct recursion_guard = 1; libtest_malloc_internal_usage++; - if (!backtrace) { + if (!prefix) + prefix = indent; + if (!indent) + indent = prefix; + if (!prefix || !indent) + abort(); + + if (backtrace) { + if (ucontext) { + abort(); + } + } else if (ucontext) { + if (unw_init_local2(&cursor, (unw_context_t *)ucontext, UNW_INIT_SIGNAL_FRAME)) + goto out; + } else { if (unw_getcontext(&context)) goto out; if (unw_init_local(&cursor, &context)) @@ -86,14 +101,15 @@ libtest_print_backtrace(FILE *fp, const char *indent, size_t first, const struct #endif #if defined(HAVE_LINE_INFO) - fprintf(fp, "%s0x%016"PRIxPTR": %s", indent, (uintptr_t)ip, funcname ? funcname : "???"); + fprintf(fp, "%s0x%016"PRIxPTR": %s", prefix, (uintptr_t)ip, funcname ? funcname : "???"); if (line) fprintf(fp, " (%s:%i)\n", filename, lineno); else fprintf(fp, "\n"); #else - fprintf(fp, "%s0x%016"PRIxPTR"\n", indent, (uintptr_t)ip); + fprintf(fp, "%s0x%016"PRIxPTR"\n", prefix, (uintptr_t)ip); #endif + prefix = indent; } #if defined(HAVE_LINE_INFO) -- cgit v1.2.3-70-g09d2