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