source: branches/libc-0.6/src/binutils/gprof/symtab.h

Last change on this file was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 4.2 KB
Line 
1/* symtab.h
2
3 Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
4
5This file is part of GNU Binutils.
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program; if not, write to the Free Software
19Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
20
21
22#ifndef symtab_h
23#define symtab_h
24
25/* For a profile to be intelligible to a human user, it is necessary
26 to map code-addresses into source-code information. Source-code
27 information can be any combination of: (i) function-name, (ii)
28 source file-name, and (iii) source line number.
29
30 The symbol table is used to map addresses into source-code
31 information. */
32
33#define NBBS 10
34
35/* Symbol-entry. For each external in the specified file we gather
36 its address, the number of calls and compute its share of cpu time. */
37typedef struct sym
38 {
39 /* Common information:
40
41 In the symbol-table, fields ADDR and FUNC_NAME are guaranteed
42 to contain valid information. FILE may be 0, if unknown and
43 LINE_NUM maybe 0 if unknown. */
44
45 bfd_vma addr; /* Address of entry point. */
46 bfd_vma end_addr; /* End-address. */
47 const char *name; /* Name of function this sym is from. */
48 Source_File *file; /* Source file symbol comes from. */
49 int line_num; /* Source line number. */
50 unsigned int /* Boolean fields: */
51 is_func:1, /* Is this a function entry point? */
52 is_static:1, /* Is this a local (static) symbol? */
53 is_bb_head:1, /* Is this the head of a basic-blk? */
54 mapped:1, /* This symbol was mapped to another name. */
55 has_been_placed:1; /* Have we placed this symbol? */
56 unsigned long ncalls; /* How many times executed */
57 int nuses; /* How many times this symbol appears in
58 a particular context. */
59 bfd_vma bb_addr[NBBS]; /* Address of basic-block start. */
60 unsigned long bb_calls[NBBS];/* How many times basic-block was called. */
61 struct sym *next; /* For building chains of syms. */
62 struct sym *prev; /* For building chains of syms. */
63
64 /* Profile specific information: */
65
66 /* Histogram specific information: */
67 struct
68 {
69 double time; /* (Weighted) ticks in this routine. */
70 bfd_vma scaled_addr; /* Scaled entry point. */
71 }
72 hist;
73
74 /* Call-graph specific information: */
75 struct
76 {
77 unsigned long self_calls; /* How many calls to self. */
78 double child_time; /* Cumulative ticks in children. */
79 int index; /* Index in the graph list. */
80 int top_order; /* Graph call chain top-sort order. */
81 bfd_boolean print_flag; /* Should this be printed? */
82 struct
83 {
84 double fract; /* What % of time propagates. */
85 double self; /* How much self time propagates. */
86 double child; /* How much child time propagates. */
87 }
88 prop;
89 struct
90 {
91 int num; /* Internal number of cycle on. */
92 struct sym *head; /* Head of cycle. */
93 struct sym *next; /* Next member of cycle. */
94 }
95 cyc;
96 struct arc *parents; /* List of caller arcs. */
97 struct arc *children; /* List of callee arcs. */
98 }
99 cg;
100 }
101Sym;
102
103/* Symbol-tables are always assumed to be sorted
104 in increasing order of addresses. */
105typedef struct
106 {
107 unsigned int len; /* # of symbols in this table. */
108 Sym *base; /* First element in symbol table. */
109 Sym *limit; /* Limit = base + len. */
110 }
111Sym_Table;
112
113extern Sym_Table symtab; /* The symbol table. */
114
115extern void sym_init PARAMS ((Sym *));
116extern void symtab_finalize PARAMS ((Sym_Table *));
117#ifdef DEBUG
118extern Sym *dbg_sym_lookup PARAMS ((Sym_Table *, bfd_vma));
119#endif
120extern Sym *sym_lookup PARAMS ((Sym_Table *, bfd_vma));
121extern void find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
122
123#endif /* symtab_h */
Note: See TracBrowser for help on using the repository browser.