- protect_control_stack_guard_page_thread(1, th);
- protect_control_stack_return_guard_page_thread(0, th);
- break;
- }
- /* Get vm_region info */
- region_addr = (vm_address_t)code_vector[1];
- info_count = VM_REGION_BASIC_INFO_COUNT;
- if ((ret = vm_region(mach_task_self(),
- ®ion_addr,
- ®ion_size,
- VM_REGION_BASIC_INFO,
- (vm_region_info_t)®ion_info,
- &info_count,
- ®ion_name)))
- lose("vm_region (VM_REGION_BASIC_INFO) failed failed %d\n", ret);
- /* Check if still protected */
- if ((region_info.protection & OS_VM_PROT_ALL) == 0) {
- /* KLUDGE:
- * If two threads fault on the same page, the protection
- * is cleared as the first thread runs memory_fault_handler.
- * Grep for "not marked as write-protected" in gencgc.c
- */
- ret = KERN_SUCCESS;