# endif
}
+#ifndef kCFCoreFoundationVersionNumber_iOS_8_0
+# define kCFCoreFoundationVersionNumber_iOS_8_0 1140.1
+#endif
+
/* Evaluates the stack range for a given thread. Returns the lower */
/* bound and sets *phi to the upper one. */
STATIC ptr_t GC_stack_range_for(ptr_t *phi, thread_act_t thread, GC_thread p,
/* everywhere. Hence we use our own version. Alternatively, */
/* we could use THREAD_STATE_MAX (but seems to be not optimal). */
kern_return_t kern_result;
- mach_msg_type_number_t thread_state_count = GC_MACH_THREAD_STATE_COUNT;
GC_THREAD_STATE_T state;
# if defined(ARM32) && defined(ARM_THREAD_STATE32)
-# ifndef kCFCoreFoundationVersionNumber_iOS_8_0
-# define kCFCoreFoundationVersionNumber_iOS_8_0 1140.1
-# endif
- /* Use ARM_UNIFIED_THREAD_STATE on iOS7 64-bit and up and iOS8 */
- /* 32-bit and up. iOS7 was the first iOS with 64-bit support so */
- /* if we run on a 64-bit CPU we know we're on iOS7 or higher. */
+ /* Use ARM_UNIFIED_THREAD_STATE on iOS8+ 32-bit targets and on */
+ /* 64-bit H/W (iOS7+ 32-bit mode). */
size_t size;
static cpu_type_t cputype = 0;
+
if (cputype == 0) {
sysctlbyname("hw.cputype", &cputype, &size, NULL, 0);
}
- if (cputype == CPU_TYPE_ARM64 || kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) {
+ if (cputype == CPU_TYPE_ARM64
+ || kCFCoreFoundationVersionNumber
+ >= kCFCoreFoundationVersionNumber_iOS_8_0) {
arm_unified_thread_state_t unified_state;
- mach_msg_type_number_t unified_thread_state_count = ARM_UNIFIED_THREAD_STATE_COUNT;
+ mach_msg_type_number_t unified_thread_state_count
+ = ARM_UNIFIED_THREAD_STATE_COUNT;
+
kern_result = thread_get_state(thread, ARM_UNIFIED_THREAD_STATE,
(natural_t *)&unified_state,
&unified_thread_state_count);
if (unified_state.ash.flavor != ARM_THREAD_STATE32) {
- // Sanity check. The flavor in the header should always be ARM_THREAD_STATE32
- ABORT("unified_state.ash.flavor != ARM_THREAD_STATE32");
+ ABORT("unified_state flavor should be ARM_THREAD_STATE32");
}
state = unified_state.ts_32;
- thread_state_count = unified_state.ash.count;
- } else {
- kern_result = thread_get_state(thread, ARM_THREAD_STATE,
- (natural_t *)&state,
- &thread_state_count);
- }
-# else
-
- /* Get the thread state (registers, etc) */
- kern_result = thread_get_state(thread, GC_MACH_THREAD_STATE,
- (natural_t *)&state,
- &thread_state_count);
+ } else
# endif
+ /* else */ {
+ mach_msg_type_number_t thread_state_count = GC_MACH_THREAD_STATE_COUNT;
+
+ /* Get the thread state (registers, etc) */
+ kern_result = thread_get_state(thread, GC_MACH_THREAD_STATE,
+ (natural_t *)&state,
+ &thread_state_count);
+ }
# ifdef DEBUG_THREADS
GC_log_printf("thread_get_state returns value = %d\n", kern_result);
# endif