From: John David Anglin Date: Thu, 10 Apr 2025 14:00:13 +0000 (-0400) Subject: libbacktrace: Add hpux fileline support X-Git-Tag: basepoints/gcc-16~192 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=911973a784aab34e13c683545f28177d0d7716cd;p=thirdparty%2Fgcc.git libbacktrace: Add hpux fileline support Fixes libstdc++ stacktrace tests. 2025-04-10 John David Anglin libbacktrace/ChangeLog: * fileline.c (hpux_get_executable_path): New. (fileline_initialize): Add pass to get hpux executable path. --- diff --git a/libbacktrace/fileline.c b/libbacktrace/fileline.c index c9fd86b8c0c..d2900aa3c66 100644 --- a/libbacktrace/fileline.c +++ b/libbacktrace/fileline.c @@ -47,6 +47,10 @@ POSSIBILITY OF SUCH DAMAGE. */ #include #endif +#ifdef __hpux__ +#include +#endif + #ifdef HAVE_WINDOWS_H #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN @@ -66,6 +70,33 @@ POSSIBILITY OF SUCH DAMAGE. */ #define getexecname() NULL #endif +#ifdef __hpux__ +static char * +hpux_get_executable_path (struct backtrace_state *state, + backtrace_error_callback error_callback, void *data) +{ + struct shl_descriptor *desc; + size_t len = sizeof (struct shl_descriptor); + + desc = backtrace_alloc (state, len, error_callback, data); + if (desc == NULL) + return NULL; + + if (shl_get_r (0, desc) == -1) + { + backtrace_free (state, desc, len, error_callback, data); + return NULL; + } + + return desc->filename; +} + +#else + +#define hpux_get_executable_path(state, error_callback, data) NULL + +#endif + #if !defined (HAVE_KERN_PROC_ARGS) && !defined (HAVE_KERN_PROC) #define sysctl_exec_name1(state, error_callback, data) NULL @@ -245,7 +276,7 @@ fileline_initialize (struct backtrace_state *state, descriptor = -1; called_error_callback = 0; - for (pass = 0; pass < 10; ++pass) + for (pass = 0; pass < 11; ++pass) { int does_not_exist; @@ -285,6 +316,9 @@ fileline_initialize (struct backtrace_state *state, case 9: filename = windows_get_executable_path (buf, error_callback, data); break; + case 10: + filename = hpux_get_executable_path (state, error_callback, data); + break; default: abort (); }