| 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 |  |