X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/5ba3f43ea354af8ad55bea84372a2bc834d8757c..0a7de7458d150b5d4dffc935ba399be265ef0a1a:/osfmk/i386/bsd_i386_native.c?ds=sidebyside diff --git a/osfmk/i386/bsd_i386_native.c b/osfmk/i386/bsd_i386_native.c index 4ec100eff..541ec6a72 100644 --- a/osfmk/i386/bsd_i386_native.c +++ b/osfmk/i386/bsd_i386_native.c @@ -2,7 +2,7 @@ * Copyright (c) 2010-2012 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ - * + * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in @@ -11,10 +11,10 @@ * unlawful or unlicensed copies of an Apple operating system, or to * circumvent, violate, or enable the circumvention or violation of, any * terms of an Apple operating system software license agreement. - * + * * Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this file. - * + * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, @@ -22,7 +22,7 @@ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. - * + * * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ #include @@ -74,21 +74,22 @@ */ kern_return_t machine_thread_dup( - thread_t parent, - thread_t child -) + thread_t parent, + thread_t child, + __unused boolean_t is_corpse + ) { - - pcb_t parent_pcb = THREAD_TO_PCB(parent); - pcb_t child_pcb = THREAD_TO_PCB(child); + pcb_t parent_pcb = THREAD_TO_PCB(parent); + pcb_t child_pcb = THREAD_TO_PCB(child); /* * Copy over the x86_saved_state registers */ - if (thread_is_64bit(parent)) + if (thread_is_64bit_addr(parent)) { bcopy(USER_REGS64(parent), USER_REGS64(child), sizeof(x86_saved_state64_t)); - else + } else { bcopy(USER_REGS32(parent), USER_REGS32(child), sizeof(x86_saved_state32_t)); + } /* * Check to see if parent is using floating point @@ -96,26 +97,27 @@ machine_thread_dup( */ fpu_dup_fxstate(parent, child); -#ifdef MACH_BSD +#ifdef MACH_BSD /* * Copy the parent's cthread id and USER_CTHREAD descriptor, if 32-bit. */ child_pcb->cthread_self = parent_pcb->cthread_self; - if (!thread_is_64bit(parent)) + if (!thread_is_64bit_addr(parent)) { child_pcb->cthread_desc = parent_pcb->cthread_desc; + } /* * FIXME - should a user specified LDT, TSS and V86 info * be duplicated as well?? - probably not. */ // duplicate any use LDT entry that was set I think this is appropriate. - if (parent_pcb->uldt_selector!= 0) { - child_pcb->uldt_selector = parent_pcb->uldt_selector; + if (parent_pcb->uldt_selector != 0) { + child_pcb->uldt_selector = parent_pcb->uldt_selector; child_pcb->uldt_desc = parent_pcb->uldt_desc; } #endif - return (KERN_SUCCESS); + return KERN_SUCCESS; } void thread_set_parent(thread_t parent, int pid); @@ -125,8 +127,8 @@ thread_set_parent(thread_t parent, int pid) { pal_register_cache_state(parent, DIRTY); - if (thread_is_64bit(parent)) { - x86_saved_state64_t *iss64; + if (thread_is_64bit_addr(parent)) { + x86_saved_state64_t *iss64; iss64 = USER_REGS64(parent); @@ -134,7 +136,7 @@ thread_set_parent(thread_t parent, int pid) iss64->rdx = 0; iss64->isf.rflags &= ~EFL_CF; } else { - x86_saved_state32_t *iss32; + x86_saved_state32_t *iss32; iss32 = USER_REGS32(parent); @@ -149,7 +151,7 @@ thread_set_parent(thread_t parent, int pid) * current thread to the given thread ID; fast version for 32-bit processes * * Parameters: self Thread ID to set - * + * * Returns: 0 Success * !0 Not success */ @@ -157,15 +159,15 @@ kern_return_t thread_fast_set_cthread_self(uint32_t self) { machine_thread_set_tsd_base(current_thread(), self); - return (USER_CTHREAD); /* N.B.: not a kern_return_t! */ + return USER_CTHREAD; /* N.B.: not a kern_return_t! */ } /* * thread_fast_set_cthread_self64: Sets the machine kernel thread ID of the - * current thread to the given thread ID; fast version for 64-bit processes + * current thread to the given thread ID; fast version for 64-bit processes * * Parameters: self Thread ID - * + * * Returns: 0 Success * !0 Not success */ @@ -173,7 +175,7 @@ kern_return_t thread_fast_set_cthread_self64(uint64_t self) { machine_thread_set_tsd_base(current_thread(), self); - return (USER_CTHREAD); /* N.B.: not a kern_return_t! */ + return USER_CTHREAD; /* N.B.: not a kern_return_t! */ } /* @@ -210,11 +212,12 @@ thread_set_user_ldt(uint32_t address, uint32_t size, uint32_t flags) pcb_t pcb; struct fake_descriptor temp; - if (flags != 0) - return -1; // flags not supported - if (size > 0xFFFFF) - return -1; // size too big, 1 meg is the limit - + if (flags != 0) { + return -1; // flags not supported + } + if (size > 0xFFFFF) { + return -1; // size too big, 1 meg is the limit + } mp_disable_preemption(); // create a "fake" descriptor so we can use fix_desc() @@ -225,14 +228,14 @@ thread_set_user_ldt(uint32_t address, uint32_t size, uint32_t flags) temp.offset = address; temp.lim_or_seg = size; temp.size_or_wdct = SZ_32; - temp.access = ACC_P|ACC_PL_U|ACC_DATA_W; + temp.access = ACC_P | ACC_PL_U | ACC_DATA_W; // turn this into a real descriptor - fix_desc(&temp,1); + fix_desc(&temp, 1); // set up our data in the pcb pcb->uldt_desc = *(struct real_descriptor*)&temp; - pcb->uldt_selector = USER_SETTABLE; // set the selector value + pcb->uldt_selector = USER_SETTABLE; // set the selector value // now set it up in the current table... *ldt_desc_p(USER_SETTABLE) = *(struct real_descriptor*)&temp;