X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/55e303ae13a4cf49d70f2294092726f2fffb9ef2..7ddcb079202367355dddccdfa4318e57d50318be:/osfmk/i386/mcount.s diff --git a/osfmk/i386/mcount.s b/osfmk/i386/mcount.s index 77c5a07bc..0246ba152 100644 --- a/osfmk/i386/mcount.s +++ b/osfmk/i386/mcount.s @@ -1,16 +1,19 @@ /* * Copyright (c) 2003 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ - * - * Copyright (c) 1999-2003 Apple Computer, 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 - * compliance with the License. Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this - * file. + * compliance with the License. The rights granted to you under the License + * may not be used to create, or enable the creation or redistribution of, + * 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 @@ -20,7 +23,7 @@ * Please see the License for the specific language governing rights and * limitations under the License. * - * @APPLE_LICENSE_HEADER_END@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ #define __NO_UNDERSCORES__ @@ -30,23 +33,19 @@ Entry(mcount) pushl %ebp // setup mcount's frame movl %esp,%ebp + pushl %eax // save %eax pushf // save interrupt state cli // disable interrupts - // - // Check that %gs, with segment pointing at the per-cpu data area, - // has been set up. C routines (mp_desc_init() in particular) may - // be called very early before this happens. - // - mov %gs,%ax - test %ax,%ax - jz 1f - // // Check that this cpu is ready. // This delays the start of mcounting until a cpu is really prepared. // - movl %gs:CPD_CPU_STATUS,%eax + mov %gs, %ax + test %ax, %ax + jz 1f + + movl %gs:CPU_RUNNING,%eax testl %eax,%eax jz 1f @@ -54,10 +53,11 @@ Entry(mcount) // Test for recursion as indicated by a per-cpu flag. // Skip if nested, otherwise set the flag and call the C mount(). // - movl %gs:CPD_MCOUNT_OFF,%eax + movl %gs:CPU_MCOUNT_OFF,%eax testl %eax,%eax // test for recursion jnz 1f - incl %gs:CPD_MCOUNT_OFF // set recursion flag + + incl %gs:CPU_MCOUNT_OFF // set recursion flag movl (%ebp),%eax // frame pointer of mcount's caller movl 4(%eax),%eax // mcount's caller's return address @@ -66,9 +66,10 @@ Entry(mcount) call _mcount // call the C mcount addl $8,%esp // pop args - decl %gs:CPD_MCOUNT_OFF // turn off recursion flag + decl %gs:CPU_MCOUNT_OFF // turn off recursion flag 1: popf // restore interrupt state + popl %eax movl %ebp,%esp // tear down mcount's frame popl %ebp ret