From ab1eaed0a5b40a52bfcf3bb1707804ff23d1be2a Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 24 Apr 2026 20:48:00 +0500 Subject: [PATCH] engine: platform: posix: remove Sys_Crash and Sys_CrashDetailsLibbacktrace from the output by matching function name only once --- engine/platform/posix/crash_libbacktrace.c | 25 +++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/engine/platform/posix/crash_libbacktrace.c b/engine/platform/posix/crash_libbacktrace.c index 6eabe3fb..b9130e4d 100644 --- a/engine/platform/posix/crash_libbacktrace.c +++ b/engine/platform/posix/crash_libbacktrace.c @@ -40,8 +40,16 @@ struct print_data int len; int idx; int logfd; + qboolean skip_wrappers; }; +static qboolean Sys_IsCrashHandlerFrame( const char *name ) +{ + if( !name ) + return false; + return !Q_strcmp( name, "Sys_Crash" ) || !Q_strcmp( name, "Sys_CrashDetailsLibbacktrace" ); +} + static void Sys_AppendPrint( struct print_data *pd, const char *fmt, ... ) { va_list va; @@ -76,6 +84,13 @@ static void Sys_BacktracePrintSyminfo( void *data, uintptr_t pc, const char *sym Dl_info dlinfo = { 0 }; const char *module_name; + if( pd->skip_wrappers ) + { + if( Sys_IsCrashHandlerFrame( symname )) + return; + pd->skip_wrappers = false; + } + if( dladdr((void *)pc, &dlinfo )) module_name = dlinfo.dli_fname; else module_name = NULL; @@ -102,6 +117,13 @@ static int Sys_BacktracePrintFull( void *data, uintptr_t pc, const char *filenam Dl_info dlinfo = { 0 }; const char *module_name; + if( pd->skip_wrappers ) + { + if( Sys_IsCrashHandlerFrame( function )) + return 0; + pd->skip_wrappers = false; + } + if( dladdr((void *)pc, &dlinfo )) module_name = dlinfo.dli_fname; else module_name = NULL; @@ -131,9 +153,10 @@ int Sys_CrashDetailsLibbacktrace( int logfd, char *message, int len, size_t max_ .message_size = max_len - len, .logfd = logfd, .len = len, + .skip_wrappers = true, }; - backtrace_full( g_bt_state, 1, Sys_BacktracePrintFull, Sys_BacktracePrintError, &pd ); + backtrace_full( g_bt_state, 0, Sys_BacktracePrintFull, Sys_BacktracePrintError, &pd ); return pd.len; }