- /* 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;
+ addr = (void*)code_vector[1];
+ /* Undefined alien */
+ if (os_trunc_to_page(addr) == undefined_alien_address) {
+ handler = undefined_alien_handler;