#include <sys/gmon.h>

sys/gmon.h

20 macros · 10 structs · 5 typedefs · 1 variable

structgmonhdr

Structure prepended to gmon.out profiling data file.
size 32, align 4
uint32_tlpcbase pc address of sample buffer
uint32_thpcmax pc address of sampled buffer
uint32_tncntsize of sample buffer (plus this header)
int32_tversionversion number
int32_tprofrateprofiling clock rate
int32_t[3]sparereserved

macroGMONVERSION

#define GMONVERSION 0x00051879

structgmonhdr_64

size 40, align 8
uint64_tlpcbase pc address of sample buffer
uint64_thpcmax pc address of sampled buffer
uint32_tncntsize of sample buffer (plus this header)
int32_tversionversion number
int32_tprofrateprofiling clock rate
int32_t[3]sparereserved

typedefgmonhdr_t

typedef struct gmonhdr_64 gmonhdr_t;

macroHISTCOUNTER

histogram counters are unsigned shorts (according to the kernel).
#define HISTCOUNTER unsigned short

macroHISTFRACTION

fraction of text space to allocate for histogram counters here, 1/2
#define HISTFRACTION 2

macroHASHFRACTION

Fraction of text space to allocate for from hash buckets. The value of HASHFRACTION is based on the minimum number of bytes of separation between two subroutine call points in the object code. Given MIN_SUBR_SEPARATION bytes of separation the value of HASHFRACTION is calculated as: HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1); For example, on the VAX, the shortest two call sequence is: calls $0,(r0) calls $0,(r0) which is separated by only three bytes, thus HASHFRACTION is calculated as: HASHFRACTION = 3 / (2 * 2 - 1) = 1 Note that the division above rounds down, thus if MIN_SUBR_FRACTION is less than three, this algorithm will not work! In practice, however, call instructions are rarely at a minimal distance. Hence, we will define HASHFRACTION to be 2 across all architectures. This saves a reasonable amount of space for profiling data structures without (in practice) sacrificing any granularity.
#define HASHFRACTION 2

macroARCDENSITY

percent of text space to allocate for tostructs with a minimum.
#define ARCDENSITY 2

macroMINARCS

#define MINARCS 50

macroMAXARCS

#define MAXARCS ((1 << (8 * sizeof(HISTCOUNTER))) - 2)

structtostruct

size 12, align 4
uint32_tselfpc
int32_tcount
uint16_tlink
uint16_torder

structtostruct_64

size 16, align 8
uint64_tselfpc
int32_tcount
uint16_tlink
uint16_torder

typedeftostruct_t

typedef struct tostruct_64 tostruct_t;

structrawarc

a raw arc, with pointers to the calling site and the called site and a count.
size 12, align 4
uint32_traw_frompc
uint32_traw_selfpc
int32_traw_count

structrawarc_64

size 24, align 8
uint64_traw_frompc
uint64_traw_selfpc
int32_traw_count

typedefrawarc_t

typedef struct rawarc_64 rawarc_t;

macroROUNDDOWN

general rounding functions.
#define ROUNDDOWN(x, y) (((x)/(y))*(y))

macroROUNDUP

#define ROUNDUP(x, y) ((((x)+(y)-1)/(y))*(y))

structgmonparam

The profiling data structures are housed in this structure.
size 96, align 8
intstate
u_short *kcount
u_longkcountsize
u_short *froms
u_longfromssize
tostruct_t *tos
u_longtossize
longtolimit
u_longlowpc
u_longhighpc
u_longtextsize
u_longhashfraction

variable_gmonparam

extern struct gmonparam _gmonparam

macroGMON_PROF_ON

Possible states of profiling.
#define GMON_PROF_ON 0

macroGMON_PROF_BUSY

#define GMON_PROF_BUSY 1

macroGMON_PROF_ERROR

#define GMON_PROF_ERROR 2

macroGMON_PROF_OFF

#define GMON_PROF_OFF 3

macroGMON_MAGIC

In order to support more information than in the original mon.out and gmon.out files there is an alternate gmon.out file format. The alternate gmon.out file format starts with a magic number then separates the information with gmon_data_t's.
#define GMON_MAGIC 0xbeefbabe

macroGMON_MAGIC_64

#define GMON_MAGIC_64 0xbeefbabf

structgmon_data

size 8, align 4
uint32_ttypeconstant for type of data following this struct
uint32_tsizesize in bytes of the data following this struct

typedefgmon_data_t

typedef struct gmon_data gmon_data_t;

macroGMONTYPE_SAMPLES

The GMONTYPE_SAMPLES gmon_data.type is for the histogram counters described above and has a gmonhdr_t followed by the counters.
#define GMONTYPE_SAMPLES 1

macroGMONTYPE_RAWARCS

The GMONTYPE_RAWARCS gmon_data.type is for the raw arcs described above.
#define GMONTYPE_RAWARCS 2

macroGMONTYPE_ARCS_ORDERS

The GMONTYPE_ARCS_ORDERS gmon_data.type is for the raw arcs with a call order field. The order is the order is a sequence number for the order each call site was executed. Raw_order values start at 1 not zero. Other than the raw_order field this is the same information as in the rawarc_t.
#define GMONTYPE_ARCS_ORDERS 3

structrawarc_order

size 16, align 4
uint32_traw_frompc
uint32_traw_selfpc
uint32_traw_count
uint32_traw_order

structrawarc_order_64

size 24, align 8
uint64_traw_frompc
uint64_traw_selfpc
uint32_traw_count
uint32_traw_order

typedefrawarc_order_t

typedef struct rawarc_order_64 rawarc_order_t;

macroGMONTYPE_DYLD_STATE

The GMONTYPE_DYLD_STATE gmon_data.type is for the dynamic link editor state of the program. The informations starts with an uint32_t with the count of states: image_count Then each state follows in the file. The state is made up of vmaddr_slide (the amount dyld slid this image from it's vmaddress) name (the file name dyld loaded this image from) The vmaddr_slide is a 32-bit value for 32-bit programs and 64-bit value for 64-bit programs.
#define GMONTYPE_DYLD_STATE 4

macroGMONTYPE_DYLD2_STATE

The GMONTYPE_DYLD2_STATE gmon_data.type is for the dynamic link editor state of the program. The informations starts with an uint32_t with the count of states: image_count Then each state follows in the file. The state is made up of image_header (the address where dyld loaded this image) name (the file name dyld loaded this image from) The image_header is a 32-bit value for 32-bit programs and 64-bit value for 64-bit programs.
#define GMONTYPE_DYLD2_STATE 5