X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/de355530ae67247cbd0da700edb3a2a1dae884c2..b0d623f7f2ae71ed96e60569f61f9a9a27016e80:/osfmk/profiling/i386/profile-md.h diff --git a/osfmk/profiling/i386/profile-md.h b/osfmk/profiling/i386/profile-md.h index 7fa90283e..b30deae93 100644 --- a/osfmk/profiling/i386/profile-md.h +++ b/osfmk/profiling/i386/profile-md.h @@ -1,23 +1,29 @@ /* * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. + * 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. 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. * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * 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, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. + * 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_LICENSE_HEADER_END@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* * @OSF_COPYRIGHT@ @@ -140,6 +146,8 @@ #ifndef _PROFILE_MD_H #define _PROFILE_MD_H +#include + /* * Define the interfaces between the assembly language profiling support * that is common between the kernel, mach servers, and user space library. @@ -149,8 +157,13 @@ * Integer types used. */ -typedef long prof_ptrint_t; /* hold either pointer or signed int */ -typedef unsigned long prof_uptrint_t; /* hold either pointer or unsigned int */ +/* + * These hold either a pointer or a signed/unsigned int. + * They are 32 bit on i386 and 64 bit on x86_64. + */ +typedef long prof_ptrint_t; +typedef unsigned long prof_uptrint_t; + typedef long prof_lock_t; /* lock word type */ typedef unsigned char prof_flag_t; /* type for boolean flags */ @@ -158,11 +171,17 @@ typedef unsigned char prof_flag_t; /* type for boolean flags */ * Double precision counter. */ +/* These are 64 bit on both i386 and x86_64 */ +#ifdef __i386__ typedef struct prof_cnt_t { prof_uptrint_t low; /* low 32 bits of counter */ prof_uptrint_t high; /* high 32 bits of counter */ } prof_cnt_t; +#else +typedef unsigned long prof_cnt_t; +#endif +#ifdef __i386__ #if defined(__GNUC__) && !defined(lint) #define PROF_CNT_INC(cnt) \ __asm__("addl $1,%0; adcl $0,%1" \ @@ -200,6 +219,14 @@ typedef struct prof_cnt_t { #define PROF_CNT_SUB(cnt,val) (((((cnt).low - (val)) > (cnt).low) ? ((cnt).high--) : 0), ((cnt).low -= (val))) #define PROF_CNT_LSUB(cnt,val) (PROF_CNT_SUB(cnt,(val).low), (cnt).high -= (val).high) #endif +#else +/* x86_64 */ +#define PROF_CNT_INC(cnt) (cnt++) +#define PROF_CNT_ADD(cnt,val) (cnt+=val) +#define PROF_CNT_LADD(cnt,val) (cnt+=val) +#define PROF_CNT_SUB(cnt,val) (cnt-=val) +#define PROF_CNT_LSUB(cnt,val) (cnt-=val) +#endif #define PROF_ULONG_TO_CNT(cnt,val) (((cnt).high = 0), ((cnt).low = val)) #define PROF_CNT_OVERFLOW(cnt,high,low) (((high) = (cnt).high), ((low) = (cnt).low))