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