mingw-5.1.4/win32/include/profil.h
changeset 0 76b1f169d9fe
equal deleted inserted replaced
-1:000000000000 0:76b1f169d9fe
       
     1 /* profil.h: gprof profiling header file
       
     2 
       
     3    Copyright 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
       
     4 
       
     5 This file is part of Cygwin.
       
     6 
       
     7 This software is a copyrighted work licensed under the terms of the
       
     8 Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
       
     9 details. */
       
    10 
       
    11 /*
       
    12  * This file is taken from Cygwin distribution. Please keep it in sync.
       
    13  * The differences should be within __MINGW32__ guard.
       
    14  */
       
    15 
       
    16 /* profiling frequency.  (No larger than 1000) */
       
    17 #define PROF_HZ			100
       
    18 
       
    19 /* convert an addr to an index */
       
    20 #define PROFIDX(pc, base, scale)	\
       
    21   ({									\
       
    22     size_t i = (pc - base) / 2;				\
       
    23     if (sizeof (unsigned long long int) > sizeof (size_t))		\
       
    24       i = (unsigned long long int) i * scale / 65536;			\
       
    25     else								\
       
    26       i = i / 65536 * scale + i % 65536 * scale / 65536;		\
       
    27     i;									\
       
    28   })
       
    29 
       
    30 /* convert an index into an address */
       
    31 #define PROFADDR(idx, base, scale)		\
       
    32   ((base)					\
       
    33    + ((((unsigned long long)(idx) << 16)	\
       
    34        / (unsigned long long)(scale)) << 1))
       
    35 
       
    36 /* convert a bin size into a scale */
       
    37 #define PROFSCALE(range, bins)		(((bins) << 16) / ((range) >> 1))
       
    38 
       
    39 typedef void *_WINHANDLE;
       
    40 
       
    41 struct profinfo {
       
    42     _WINHANDLE targthr;			/* thread to profile */
       
    43     _WINHANDLE profthr;			/* profiling thread */
       
    44     u_short *counter;			/* profiling counters */
       
    45     u_long lowpc, highpc;		/* range to be profiled */
       
    46     u_int scale;			/* scale value of bins */
       
    47 };
       
    48 
       
    49 int profile_ctl(struct profinfo *, char *, size_t, u_long, u_int);
       
    50 int profil(char *, size_t, u_long, u_int);
       
    51