Lots of changes from David Mosberger-Tang; see ChangeLog and NOTES for details:
[external/binutils.git] / gprof / gmon_out.h
1 /*
2  * This file specifies the format of gmon.out files.  It should have
3  * as few external dependencies as possible as it is going to be
4  * included in many different programs.  That is, minimize the
5  * number of #include's.
6  *
7  * A gmon.out file consists of a header (defined by gmon_hdr) followed
8  * by a sequence of records.  Each record starts with a one-byte tag
9  * identifying the type of records, followed by records specific data.
10  */
11 #ifndef gmon_out_h
12 #define gmon_out_h
13
14 #define GMON_MAGIC      "gmon"  /* magic cookie */
15 #define GMON_VERSION    1       /* version number */
16
17 /*
18  * Raw header as it appears on file (without padding):
19  */
20 struct gmon_hdr {
21     char        cookie[4];
22     char        version[4];
23     char        spare[3*4];
24 };
25
26 /* types of records in this file: */
27 typedef enum {
28     GMON_TAG_TIME_HIST, GMON_TAG_CG_ARC, GMON_TAG_BB_COUNT
29 } GMON_Record_Tag;
30
31 struct gmon_hist_hdr {
32     char low_pc[sizeof(bfd_vma)];       /* base pc address of sample buffer */
33     char high_pc[sizeof(bfd_vma)];      /* max pc address of sampled buffer */
34     char hist_size[4];                  /* size of sample buffer */
35     char prof_rate[4];                  /* profiling clock rate */
36     char dimen[15];                     /* phys. dim., usually "seconds" */
37     char dimen_abbrev;                  /* usually 's' for "seconds" */
38 };
39
40 struct gmon_cg_arc_record {
41     char from_pc[sizeof(bfd_vma)];      /* address within caller's body */
42     char self_pc[sizeof(bfd_vma)];      /* address within callee's body */
43     char count[4];                      /* number of arc traversals */
44 };
45
46 #endif /* gmon_out_h */