home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / gnu / djgpp / src / binutils.2 / gprof / gprof.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-05-30  |  7.4 KB  |  290 lines

  1. /*
  2.  * Copyright (c) 1983 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms are permitted
  6.  * provided that: (1) source distributions retain this entire copyright
  7.  * notice and comment, and (2) distributions including binaries display
  8.  * the following acknowledgement:  ``This product includes software
  9.  * developed by the University of California, Berkeley and its contributors''
  10.  * in the documentation or other materials provided with the distribution
  11.  * and in all advertising materials mentioning features or use of this
  12.  * software. Neither the name of the University nor the names of its
  13.  * contributors may be used to endorse or promote products derived
  14.  * from this software without specific prior written permission.
  15.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  16.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  17.  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18.  *
  19.  *    @(#)gprof.h    5.9 (Berkeley) 6/1/90
  20.  */
  21.  
  22. #include <ansidecl.h>
  23. #include "sysdep.h"
  24. #include "bfd.h"
  25. #include "gmon.h"
  26.  
  27. /* AIX defines hz as a macro.  */
  28. #undef hz
  29.  
  30. #ifdef    MACHINE_H
  31. #    include    MACHINE_H
  32. #else
  33. #    if vax
  34. #       include "vax.h"
  35. #    endif
  36. #    if sun
  37. #        include "sun.h"
  38. #    endif
  39. #    if tahoe
  40. #        include "tahoe.h"
  41. #    endif
  42. #endif
  43.  
  44.  
  45.     /*
  46.      *    who am i, for error messages.
  47.      */
  48. char    *whoami;
  49.  
  50.     /*
  51.      * booleans
  52.      */
  53. typedef int    bool;
  54. #define    FALSE    0
  55. #define    TRUE    1
  56.  
  57.     /*
  58.      *    ticks per second
  59.      */
  60. long    hz;
  61.  
  62. typedef    unsigned short UNIT;        /* unit of profiling */
  63. char    *a_outname;
  64. #define    A_OUTNAME        "a.out"
  65.  
  66. char    *gmonname;
  67. #define    GMONNAME        "gmon.out"
  68. #define    GMONSUM            "gmon.sum"
  69.  
  70. extern int bsd_style_output;
  71. extern int discard_underscores;
  72.  
  73.     /*
  74.      *    a constructed arc,
  75.      *        with pointers to the namelist entry of the parent and the child,
  76.      *        a count of how many times this arc was traversed,
  77.      *        and pointers to the next parent of this child and
  78.      *        the next child of this parent.
  79.      */
  80. struct arcstruct {
  81.     struct nl        *arc_parentp;    /* pointer to parent's nl entry */
  82.     struct nl        *arc_childp;    /* pointer to child's nl entry */
  83.     long        arc_count;    /* how calls from parent to child */
  84.     double        arc_time;    /* time inherited along arc */
  85.     double        arc_childtime;    /* childtime inherited along arc */
  86.     struct arcstruct    *arc_parentlist; /* parents-of-this-child list */
  87.     struct arcstruct    *arc_childlist;    /* children-of-this-parent list */
  88. };
  89. typedef struct arcstruct    arctype;
  90.  
  91.     /*
  92.      * The symbol table;
  93.      * for each external in the specified file we gather
  94.      * its address, the number of calls and compute its share of cpu time.
  95.      */
  96. struct nl {
  97.     CONST char        *name;        /* the name */
  98.     unsigned long    value;        /* the pc entry point */
  99.     unsigned long    svalue;        /* entry point aligned to histograms */
  100.     double        time;        /* ticks in this routine */
  101.     double        childtime;    /* cumulative ticks in children */
  102.     long        ncall;        /* how many times called */
  103.     long        selfcalls;    /* how many calls to self */
  104.     double        propfraction;    /* what % of time propagates */
  105.     double        propself;    /* how much self time propagates */
  106.     double        propchild;    /* how much child time propagates */
  107.     bool        printflag;    /* should this be printed? */
  108.     int            index;        /* index in the graph list */
  109.     int            toporder;    /* graph call chain top-sort order */
  110.     int            cycleno;    /* internal number of cycle on */
  111.     struct nl        *cyclehead;    /* pointer to head of cycle */
  112.     struct nl        *cnext;        /* pointer to next member of cycle */
  113.     arctype        *parents;    /* list of caller arcs */
  114.     arctype        *children;    /* list of callee arcs */
  115. };
  116. typedef struct nl    nltype;
  117.  
  118. nltype    *nl;            /* the whole namelist */
  119. nltype    *npe;            /* the virtual end of the namelist */
  120. int    nname;            /* the number of function names */
  121.  
  122.     /*
  123.      *    flag which marks a nl entry as topologically ``busy''
  124.      *    flag which marks a nl entry as topologically ``not_numbered''
  125.      */
  126. #define    DFN_BUSY    -1
  127. #define    DFN_NAN        0
  128.  
  129.     /* 
  130.      *    namelist entries for cycle headers.
  131.      *    the number of discovered cycles.
  132.      */
  133. nltype    *cyclenl;        /* cycle header namelist */
  134. int    ncycle;            /* number of cycles discovered */
  135.  
  136.     /*
  137.      * The header on the gmon.out file.
  138.      * gmon.out consists of one of these headers,
  139.      * and then an array of ncnt samples
  140.      * representing the discretized program counter values.
  141.      *    this should be a struct phdr, but since everything is done
  142.      *    as UNITs, this is in UNITs too.
  143.      */
  144. struct hdr {
  145.     UNIT    *lowpc;
  146.     UNIT    *highpc;
  147.     int    ncnt;
  148. };
  149.  
  150. struct hdr    h;
  151.  
  152. int    debug;
  153.  
  154.     /*
  155.      * Each discretized pc sample has
  156.      * a count of the number of samples in its range
  157.      */
  158. UNIT    *samples;
  159.  
  160. unsigned long    s_lowpc;    /* lowpc from the profile file */
  161. unsigned long    s_highpc;    /* highpc from the profile file */
  162. unsigned lowpc, highpc;        /* range profiled, in UNIT's */
  163. unsigned sampbytes;        /* number of bytes of samples */
  164. int    nsamples;        /* number of samples */
  165. double    actime;            /* accumulated time thus far for putprofline */
  166. double    totime;            /* total time for all routines */
  167. double    printtime;        /* total of time being printed */
  168. double    scale;            /* scale factor converting samples to pc
  169.                    values: each sample covers scale bytes */
  170. char    *strtab;        /* string table in core */
  171. off_t    ssiz;            /* size of the string table */
  172. unsigned char    *textspace;        /* text space of a.out in core */
  173.  
  174.     /*
  175.      *    option flags, from a to z.
  176.      */
  177. bool    aflag;                /* suppress static functions */
  178. bool    bflag;                /* blurbs, too */
  179. bool    cflag;                /* discovered call graph, too */
  180. bool    dflag;                /* debugging options */
  181. bool    eflag;                /* specific functions excluded */
  182. bool    Eflag;                /* functions excluded with time */
  183. bool    fflag;                /* specific functions requested */
  184. bool    Fflag;                /* functions requested with time */
  185. bool    kflag;                /* arcs to be deleted */
  186. bool    sflag;                /* sum multiple gmon.out files */
  187. bool    zflag;                /* zero time/called functions, too */
  188.  
  189.     /*
  190.      *    structure for various string lists
  191.      */
  192. struct stringlist {
  193.     struct stringlist    *next;
  194.     char        *string;
  195. };
  196. struct stringlist    *elist;
  197. struct stringlist    *Elist;
  198. struct stringlist    *flist;
  199. struct stringlist    *Flist;
  200. struct stringlist    *kfromlist;
  201. struct stringlist    *ktolist;
  202.  
  203.     /*
  204.      *    function declarations
  205.      */
  206. /*
  207.         addarc();
  208. */
  209. int        arccmp();
  210. arctype        *arclookup();
  211. /*
  212.         asgnsamples();
  213.         printblurb();
  214.         cyclelink();
  215.         dfn();
  216. */
  217. bool        dfn_busy();
  218. /*
  219.         dfn_findcycle();
  220. */
  221. bool        dfn_numbered();
  222. /*
  223.         dfn_post_visit();
  224.         dfn_pre_visit();
  225.         dfn_self_cycle();
  226. */
  227. nltype        **doarcs();
  228. /*
  229.         done();
  230.         findcalls();
  231.         flatprofheader();
  232.         flatprofline();
  233. */
  234. bool        funcsymbol();
  235. /*
  236.         getnfile();
  237.         getpfile();
  238.         getstrtab();
  239.         getsymtab();
  240.         gettextspace();
  241.         gprofheader();
  242.         gprofline();
  243.         main();
  244. */
  245. unsigned long    max();
  246. int        membercmp();
  247. unsigned long    min();
  248. nltype        *nllookup();
  249. FILE        *openpfile();
  250. /*
  251.         printchildren();
  252.         printcycle();
  253.         printgprof();
  254.         printmembers();
  255.         printname();
  256.         printparents();
  257.         printprof();
  258.         readsamples();
  259. */
  260. int        printnameonly();
  261. unsigned long    reladdr();
  262. /*
  263.         sortchildren();
  264.         sortmembers();
  265.         sortparents();
  266.         tally();
  267.         timecmp();
  268.         topcmp();
  269. */
  270. int        totalcmp();
  271. /*
  272.         valcmp();
  273. */
  274.  
  275. #define    LESSTHAN    -1
  276. #define    EQUALTO        0
  277. #define    GREATERTHAN    1
  278.  
  279. #define    DFNDEBUG    1
  280. #define    CYCLEDEBUG    2
  281. #define    ARCDEBUG    4
  282. #define    TALLYDEBUG    8
  283. #define    TIMEDEBUG    16
  284. #define    SAMPLEDEBUG    32
  285. #define    AOUTDEBUG    64
  286. #define    CALLDEBUG    128
  287. #define    LOOKUPDEBUG    256
  288. #define    PROPDEBUG    512
  289. #define    ANYDEBUG    1024
  290.