On 06/11/2023 13:54, Sevan Janiyan wrote:
Sorry about the noise, I suspect the patch is invalid for Leopard.
I will follow up with a new patch which splits the case for 10.5 & older, if that is the case, once I've done more testing.

Attached patch splits the powerpc case to Leopard and newer (there's a leaked beta build of Snow Leopard for PowerPC out there) and Tiger and prior.

Tested on Tiger 10.4.11 with libsigsegv and Leopard 10.5.8 without libsigsegv.
The 4 test-sigsegv-catch tests pass on both.


Sevan
diff --git a/lib/sigsegv.c b/lib/sigsegv.c
index 8263d9b7bd..163ffb1656 100644
--- a/lib/sigsegv.c
+++ b/lib/sigsegv.c
@@ -645,6 +645,8 @@ int libsigsegv_version = LIBSIGSEGV_VERSION;
 
 #if (defined __APPLE__ && defined __MACH__) /* macOS */
 
+#include <AvailabilityMacros.h>
+
 # define SIGSEGV_FAULT_HANDLER_ARGLIST  int sig, siginfo_t *sip, void *ucp
 # define SIGSEGV_FAULT_ADDRESS  sip->si_addr
 # define SIGSEGV_FAULT_CONTEXT  ((ucontext_t *) ucp)
@@ -676,11 +678,21 @@ int libsigsegv_version = LIBSIGSEGV_VERSION;
 
 # elif defined __powerpc__
 
+#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
 /* See the definitions of
      - 'ucontext_t' and 'struct __darwin_ucontext' in <sys/_structs.h>,
      - 'struct __darwin_mcontext' in <ppc/_structs.h>, and
      - 'struct __darwin_ppc_thread_state' in <mach/ppc/_structs.h>.  */
 #  define SIGSEGV_FAULT_STACKPOINTER  ((ucontext_t *) 
ucp)->uc_mcontext->__ss.__r1
+#endif
+
+#if MAC_OS_X_VERSION_MAX_ALLOWED == MAC_OS_X_VERSION_10_4
+/* See the definitions of
+     - 'ucontext_t' and 'struct __darwin_ucontext' in <sys/_types.h>,
+     - 'struct __darwin_mcontext' in <ppc/ucontext.h>, and
+     - 'struct __darwin_ppc_thread_state' in <mach/ppc/_types.h>.  */
+#  define SIGSEGV_FAULT_STACKPOINTER  ((ucontext_t *) ucp)->uc_mcontext->ss.r1
+#endif
 
 # endif
 

Reply via email to