~steve-sk2/mingw-w64/oneiric

« back to all changes in this revision

Viewing changes to mingw-w64-crt/profile/gmon.h

  • Committer: Bazaar Package Importer
  • Author(s): Stephen Kitt
  • Date: 2010-11-18 00:04:46 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20101118000446-xe24b423su55onyl
Tags: 1.0+20101003-1
* New maintainer. (Closes: #594371.)
* New upstream snapshot:
  - Includes getopt.h. (Closes: #569914.)
* Build g++ for Win64. (Closes: #600451.)
* Standards-Version 3.9.1 (new packaging).
* Include patch from
  http://mingw-w64.svn.sourceforge.net/viewvc/mingw-w64?view=revision&revision=3715
  as suggested by Rafaël Carré.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*      $OpenBSD: gmon.h,v 1.3 1996/04/21 22:31:46 deraadt Exp $        */
 
2
/*      $NetBSD: gmon.h,v 1.5 1996/04/09 20:55:30 cgd Exp $     */
 
3
 
 
4
/*-
 
5
 * Copyright (c) 1982, 1986, 1992, 1993
 
6
 *      The Regents of the University of California.  All rights reserved.
 
7
 *
 
8
 * Redistribution and use in source and binary forms, with or without
 
9
 * modification, are permitted provided that the following conditions
 
10
 * are met:
 
11
 * 1. Redistributions of source code must retain the above copyright
 
12
 *    notice, this list of conditions and the following disclaimer.
 
13
 * 2. Redistributions in binary form must reproduce the above copyright
 
14
 *    notice, this list of conditions and the following disclaimer in the
 
15
 *    documentation and/or other materials provided with the distribution.
 
16
 * 4. Neither the name of the University nor the names of its contributors
 
17
 *    may be used to endorse or promote products derived from this software
 
18
 *    without specific prior written permission.
 
19
 *
 
20
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 
21
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
22
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
23
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 
24
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
25
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 
26
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
27
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 
28
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 
29
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 
30
 * SUCH DAMAGE.
 
31
 *
 
32
 *      @(#)gmon.h      8.2 (Berkeley) 1/4/94
 
33
 */
 
34
 
 
35
/*
 
36
 * This file is taken from Cygwin distribution. Please keep it in sync.
 
37
 * The differences should be within __MINGW32__ guard.
 
38
 */
 
39
 
 
40
#ifndef _SYS_GMON_H_
 
41
#define _SYS_GMON_H_
 
42
 
 
43
#ifndef __P
 
44
#define __P(x) x
 
45
#endif
 
46
 
 
47
#include <profile.h>
 
48
 
 
49
#ifdef __MINGW32__
 
50
#include <_bsd_types.h>
 
51
#endif /* __MINGW32__*/
 
52
 
 
53
/*
 
54
 * Structure prepended to gmon.out profiling data file.
 
55
 */
 
56
struct gmonhdr {
 
57
        size_t  lpc;            /* base pc address of sample buffer */
 
58
        size_t  hpc;            /* max pc address of sampled buffer */
 
59
        int     ncnt;           /* size of sample buffer (plus this header) */
 
60
        int     version;        /* version number */
 
61
        int     profrate;       /* profiling clock rate */
 
62
        int     spare[3];       /* reserved */
 
63
};
 
64
#define GMONVERSION     0x00051879
 
65
 
 
66
/*
 
67
 * histogram counters are unsigned shorts (according to the kernel).
 
68
 */
 
69
#define HISTCOUNTER     unsigned short
 
70
 
 
71
/*
 
72
 * fraction of text space to allocate for histogram counters here, 1/2
 
73
 */
 
74
#define HISTFRACTION    2
 
75
 
 
76
/*
 
77
 * Fraction of text space to allocate for from hash buckets.
 
78
 * The value of HASHFRACTION is based on the minimum number of bytes
 
79
 * of separation between two subroutine call points in the object code.
 
80
 * Given MIN_SUBR_SEPARATION bytes of separation the value of
 
81
 * HASHFRACTION is calculated as:
 
82
 *
 
83
 *      HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1);
 
84
 *
 
85
 * For example, on the VAX, the shortest two call sequence is:
 
86
 *
 
87
 *      calls   $0,(r0)
 
88
 *      calls   $0,(r0)
 
89
 *
 
90
 * which is separated by only three bytes, thus HASHFRACTION is
 
91
 * calculated as:
 
92
 *
 
93
 *      HASHFRACTION = 3 / (2 * 2 - 1) = 1
 
94
 *
 
95
 * Note that the division above rounds down, thus if MIN_SUBR_FRACTION
 
96
 * is less than three, this algorithm will not work!
 
97
 *
 
98
 * In practice, however, call instructions are rarely at a minimal
 
99
 * distance.  Hence, we will define HASHFRACTION to be 2 across all
 
100
 * architectures.  This saves a reasonable amount of space for
 
101
 * profiling data structures without (in practice) sacrificing
 
102
 * any granularity.
 
103
 */
 
104
#define HASHFRACTION    2
 
105
 
 
106
/*
 
107
 * percent of text space to allocate for tostructs with a minimum.
 
108
 */
 
109
#define ARCDENSITY      2
 
110
#define MINARCS         50
 
111
#define MAXARCS         ((1 << (8 * sizeof(HISTCOUNTER))) - 2)
 
112
 
 
113
struct tostruct {
 
114
        size_t  selfpc;
 
115
        long    count;
 
116
        u_short link;
 
117
        u_short pad;
 
118
};
 
119
 
 
120
/*
 
121
 * a raw arc, with pointers to the calling site and
 
122
 * the called site and a count.
 
123
 */
 
124
struct rawarc {
 
125
        size_t  raw_frompc;
 
126
        size_t  raw_selfpc;
 
127
        long    raw_count;
 
128
};
 
129
 
 
130
/*
 
131
 * general rounding functions.
 
132
 */
 
133
#define ROUNDDOWN(x,y)  (((x)/(y))*(y))
 
134
#define ROUNDUP(x,y)    ((((x)+(y)-1)/(y))*(y))
 
135
 
 
136
/*
 
137
 * The profiling data structures are housed in this structure.
 
138
 */
 
139
struct gmonparam {
 
140
        int             state;
 
141
        u_short         *kcount;
 
142
        size_t          kcountsize;
 
143
        u_short         *froms;
 
144
        size_t          fromssize;
 
145
        struct tostruct *tos;
 
146
        size_t          tossize;
 
147
        long            tolimit;
 
148
        size_t          lowpc;
 
149
        size_t          highpc;
 
150
        size_t          textsize;
 
151
        size_t          hashfraction;
 
152
};
 
153
extern struct gmonparam _gmonparam;
 
154
 
 
155
/*
 
156
 * Possible states of profiling.
 
157
 */
 
158
#define GMON_PROF_ON    0
 
159
#define GMON_PROF_BUSY  1
 
160
#define GMON_PROF_ERROR 2
 
161
#define GMON_PROF_OFF   3
 
162
 
 
163
/*
 
164
 * Sysctl definitions for extracting profiling information from the kernel.
 
165
 */
 
166
#define GPROF_STATE     0       /* int: profiling enabling variable */
 
167
#define GPROF_COUNT     1       /* struct: profile tick count buffer */
 
168
#define GPROF_FROMS     2       /* struct: from location hash bucket */
 
169
#define GPROF_TOS       3       /* struct: destination/count structure */
 
170
#define GPROF_GMONPARAM 4       /* struct: profiling parameters (see above) */
 
171
#endif /* !_SYS_GMONH_ */