diff options
author | John David Anglin <danglin@gcc.gnu.org> | 2025-04-10 10:00:13 -0400 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2025-04-10 10:00:13 -0400 |
commit | 911973a784aab34e13c683545f28177d0d7716cd (patch) | |
tree | 114d2016a5858fe58bfc53e3b42ea95da9d52089 | |
parent | a5a7233dfcee5eb20ed4853c8a1f3cbebe352a7b (diff) | |
download | gcc-911973a784aab34e13c683545f28177d0d7716cd.zip gcc-911973a784aab34e13c683545f28177d0d7716cd.tar.gz gcc-911973a784aab34e13c683545f28177d0d7716cd.tar.bz2 |
libbacktrace: Add hpux fileline support
Fixes libstdc++ stacktrace tests.
2025-04-10 John David Anglin <danglin@gcc.gnu.org>
libbacktrace/ChangeLog:
* fileline.c (hpux_get_executable_path): New.
(fileline_initialize): Add pass to get hpux executable path.
-rw-r--r-- | libbacktrace/fileline.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/libbacktrace/fileline.c b/libbacktrace/fileline.c index c9fd86b..d2900aa 100644 --- a/libbacktrace/fileline.c +++ b/libbacktrace/fileline.c @@ -47,6 +47,10 @@ POSSIBILITY OF SUCH DAMAGE. */ #include <mach-o/dyld.h> #endif +#ifdef __hpux__ +#include <dl.h> +#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 (); } |