From 75e05b8f246370f5ef0c4501f1fd3b9667bcf263 Mon Sep 17 00:00:00 2001 From: Pablo Galindo Date: Wed, 23 Apr 2025 15:06:53 +0100 Subject: [PATCH 1/2] gh-127604: Allow faulthandler to dumpC stack on MacOS Signed-off-by: Pablo Galindo --- Python/traceback.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/Python/traceback.c b/Python/traceback.c index 7319382f053eae..d0b484c3b05d0e 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -18,11 +18,24 @@ #ifdef HAVE_UNISTD_H # include // lseek() #endif -#if defined(HAVE_EXECINFO_H) && defined(HAVE_DLFCN_H) && defined(HAVE_LINK_H) + +#if (defined(HAVE_EXECINFO_H) && defined(HAVE_DLFCN_H) && defined(HAVE_LINK_H)) + #define _PY_HAS_BACKTRACE_HEADERS 1 +#endif + +#if (defined(__APPLE__) && defined(HAVE_EXECINFO_H) && defined(HAVE_DLFCN_H)) + #define _PY_HAS_BACKTRACE_HEADERS 1 +#endif + +#ifdef _PY_HAS_BACKTRACE_HEADERS # include // backtrace(), backtrace_symbols() # include // dladdr1() -# include // struct DL_info -# if defined(HAVE_BACKTRACE) && defined(HAVE_BACKTRACE_SYMBOLS) && defined(HAVE_DLADDR1) +#ifdef HAVE_LINK_H +# include // struct DL_info +#endif +# if defined(__APPLE__) && defined(HAVE_BACKTRACE) && defined(HAVE_BACKTRACE_SYMBOLS) && defined(HAVE_DLADDR) +# define CAN_C_BACKTRACE +# elif defined(HAVE_BACKTRACE) && defined(HAVE_BACKTRACE_SYMBOLS) && defined(HAVE_DLADDR1) # define CAN_C_BACKTRACE # endif #endif @@ -1193,6 +1206,9 @@ _Py_backtrace_symbols_fd(int fd, void *const *array, Py_ssize_t size) VLA(int, status, size); /* Fill in the information we can get from dladdr() */ for (Py_ssize_t i = 0; i < size; ++i) { +#ifdef __APPLE__ + status[i] = dladdr(array[i], &info[i]); +#else struct link_map *map; status[i] = dladdr1(array[i], &info[i], (void **)&map, RTLD_DL_LINKMAP); if (status[i] != 0 @@ -1204,6 +1220,7 @@ _Py_backtrace_symbols_fd(int fd, void *const *array, Py_ssize_t size) something we want to subtract out */ info[i].dli_fbase = (void *) map->l_addr; } +#endif } for (Py_ssize_t i = 0; i < size; ++i) { if (status[i] == 0 From 84175cf8691ca349a50b887a5d7c89f46f887ea0 Mon Sep 17 00:00:00 2001 From: Pablo Galindo Salgado Date: Wed, 23 Apr 2025 16:55:22 +0100 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Peter Bierma --- Python/traceback.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Python/traceback.c b/Python/traceback.c index d0b484c3b05d0e..56d94d6431befe 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -20,11 +20,11 @@ #endif #if (defined(HAVE_EXECINFO_H) && defined(HAVE_DLFCN_H) && defined(HAVE_LINK_H)) - #define _PY_HAS_BACKTRACE_HEADERS 1 +# define _PY_HAS_BACKTRACE_HEADERS 1 #endif #if (defined(__APPLE__) && defined(HAVE_EXECINFO_H) && defined(HAVE_DLFCN_H)) - #define _PY_HAS_BACKTRACE_HEADERS 1 +# define _PY_HAS_BACKTRACE_HEADERS 1 #endif #ifdef _PY_HAS_BACKTRACE_HEADERS