From cb373bbcefa1704c95a6273a08b5fe18747e9196 Mon Sep 17 00:00:00 2001 From: Joao Abecasis Date: Wed, 27 May 2015 11:31:56 +0200 Subject: [PATCH] [Fix] Do not reference thread state struct for exception state (Darwin) THREAD_FLD was being used to indirect access to both thread state and exception state, which broke compilation for recent versions of iOS in 32-bit mode. With this THREAD_FLD's logic is split, THREAD_FLD_NAME will prefix field names as needed, while THREAD_FLD injects "ts_32." wrapper as needed to access thread state. Macros to access exception state updated to use THREAD_FLD_NAME. * include/private/gc_priv.h (THREAD_FLD_NAME): New macro (only if DARWIN). * include/private/gc_priv.h (DARWIN_EXC_STATE_DAR): Define using THREAD_FLD_NAME. * os_dep.c (DARWIN_EXC_STATE_DAR): Use THREAD_FLD_NAME instead of THREAD_FLD. --- include/private/gc_priv.h | 17 +++++++---------- os_dep.c | 8 ++++---- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/include/private/gc_priv.h b/include/private/gc_priv.h index 223a2741..c1872a30 100644 --- a/include/private/gc_priv.h +++ b/include/private/gc_priv.h @@ -633,17 +633,14 @@ GC_EXTERN GC_warn_proc GC_current_warn_proc; /* without __, thus hopefully, not breaking any existing */ /* Makefile.direct builds. */ # if __DARWIN_UNIX03 -# if defined(ARM32) && defined(ARM_UNIFIED_THREAD_STATE) -# define THREAD_FLD(x) ts_32.__ ## x -# else -# define THREAD_FLD(x) __ ## x -# endif +# define THREAD_FLD_NAME(x) __ ## x # else -# if defined(ARM32) && defined(ARM_UNIFIED_THREAD_STATE) -# define THREAD_FLD(x) ts_32. ## x -# else -# define THREAD_FLD(x) x -# endif +# define THREAD_FLD_NAME(x) x +# endif +# if defined(ARM32) && defined(ARM_UNIFIED_THREAD_STATE) +# define THREAD_FLD(x) ts_32.THREAD_FLD_NAME(x) +# else +# define THREAD_FLD(x) THREAD_FLD_NAME(x) # endif #endif /* DARWIN */ diff --git a/os_dep.c b/os_dep.c index 8cd240cc..e4beef2b 100644 --- a/os_dep.c +++ b/os_dep.c @@ -4122,12 +4122,12 @@ STATIC kern_return_t GC_forward_exception(mach_port_t thread, mach_port_t task, # define DARWIN_EXC_STATE ARM_EXCEPTION_STATE # define DARWIN_EXC_STATE_COUNT ARM_EXCEPTION_STATE_COUNT # define DARWIN_EXC_STATE_T arm_exception_state_t -# define DARWIN_EXC_STATE_DAR THREAD_FLD(far) +# define DARWIN_EXC_STATE_DAR THREAD_FLD_NAME(far) #elif defined(AARCH64) # define DARWIN_EXC_STATE ARM_EXCEPTION_STATE64 # define DARWIN_EXC_STATE_COUNT ARM_EXCEPTION_STATE64_COUNT # define DARWIN_EXC_STATE_T arm_exception_state64_t -# define DARWIN_EXC_STATE_DAR THREAD_FLD(far) +# define DARWIN_EXC_STATE_DAR THREAD_FLD_NAME(far) #elif defined(POWERPC) # if CPP_WORDSZ == 32 # define DARWIN_EXC_STATE PPC_EXCEPTION_STATE @@ -4138,7 +4138,7 @@ STATIC kern_return_t GC_forward_exception(mach_port_t thread, mach_port_t task, # define DARWIN_EXC_STATE_COUNT PPC_EXCEPTION_STATE64_COUNT # define DARWIN_EXC_STATE_T ppc_exception_state64_t # endif -# define DARWIN_EXC_STATE_DAR THREAD_FLD(dar) +# define DARWIN_EXC_STATE_DAR THREAD_FLD_NAME(dar) #elif defined(I386) || defined(X86_64) # if CPP_WORDSZ == 32 # if defined(i386_EXCEPTION_STATE_COUNT) \ @@ -4157,7 +4157,7 @@ STATIC kern_return_t GC_forward_exception(mach_port_t thread, mach_port_t task, # define DARWIN_EXC_STATE_COUNT x86_EXCEPTION_STATE64_COUNT # define DARWIN_EXC_STATE_T x86_exception_state64_t # endif -# define DARWIN_EXC_STATE_DAR THREAD_FLD(faultvaddr) +# define DARWIN_EXC_STATE_DAR THREAD_FLD_NAME(faultvaddr) #else # error FIXME for non-arm/ppc/x86 darwin #endif -- 2.40.0