in Source/PLCrashAsyncThread.c [50:98]
plcrash_error_t plcrash_async_thread_state_init (plcrash_async_thread_state_t *thread_state, cpu_type_t cpu_type) {
memset(thread_state, 0, sizeof(*thread_state));
switch (cpu_type) {
#if PLCRASH_ASYNC_THREAD_X86_SUPPORT
case CPU_TYPE_X86:
thread_state->x86_state.thread.tsh.count = x86_THREAD_STATE32_COUNT;
thread_state->x86_state.thread.tsh.flavor = x86_THREAD_STATE32;
thread_state->x86_state.exception.esh.count = x86_EXCEPTION_STATE32_COUNT;
thread_state->x86_state.exception.esh.flavor = x86_EXCEPTION_STATE32;
thread_state->stack_direction = PLCRASH_ASYNC_THREAD_STACK_DIRECTION_DOWN;
thread_state->greg_size = 4;
break;
case CPU_TYPE_X86_64:
thread_state->x86_state.thread.tsh.count = x86_THREAD_STATE64_COUNT;
thread_state->x86_state.thread.tsh.flavor = x86_THREAD_STATE64;
thread_state->x86_state.exception.esh.count = x86_EXCEPTION_STATE64_COUNT;
thread_state->x86_state.exception.esh.flavor = x86_EXCEPTION_STATE64;
thread_state->stack_direction = PLCRASH_ASYNC_THREAD_STACK_DIRECTION_DOWN;
thread_state->greg_size = 8;
break;
#endif /* PLCRASH_ASYNC_THREAD_X86_SUPPORT */
#if PLCRASH_ASYNC_THREAD_ARM_SUPPORT
case CPU_TYPE_ARM:
thread_state->arm_state.thread.ash.flavor = ARM_THREAD_STATE32;
thread_state->arm_state.thread.ash.count = ARM_THREAD_STATE32_COUNT;
thread_state->stack_direction = PLCRASH_ASYNC_THREAD_STACK_DIRECTION_DOWN;
thread_state->greg_size = 4;
break;
case CPU_TYPE_ARM64:
thread_state->arm_state.thread.ash.flavor = ARM_THREAD_STATE64;
thread_state->arm_state.thread.ash.count = ARM_THREAD_STATE64_COUNT;
thread_state->stack_direction = PLCRASH_ASYNC_THREAD_STACK_DIRECTION_DOWN;
thread_state->greg_size = 8;
break;
#endif /* PLCRASH_ASYNC_THREAD_ARM_SUPPORT */
default:
return PLCRASH_ENOTSUP;
}
plcrash_async_thread_state_clear_all_regs(thread_state);
return PLCRASH_ESUCCESS;
}