]> granicus.if.org Git - gc/commitdiff
[Fix] Do not reference thread state struct for exception state (Darwin)
authorJoao Abecasis <joao@abecasis.name>
Wed, 27 May 2015 09:31:56 +0000 (11:31 +0200)
committerIvan Maidanski <ivmai@mail.ru>
Fri, 26 Jun 2015 11:20:13 +0000 (14:20 +0300)
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
os_dep.c

index 223a27414a407f61bd4dc14f3b6d5e3f354f12bb..c1872a30afb5182689e5678013c892d1603d6a93 100644 (file)
@@ -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 */
 
index 8cd240cc07d6ac642b16233c3ffecd73e0860c7f..e4beef2b50fa3fcb865c90c36745cd9be7b44b6d 100644 (file)
--- 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