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