8 * For a profile to be intelligible to a human user, it is necessary
9 * to map code-addresses into source-code information. Source-code
10 * information can be any combination of: (i) function-name, (ii)
11 * source file-name, and (iii) source line number.
13 * The symbol table is used to map addresses into source-code
22 * Symbol-entry. For each external in the specified file we gather
23 * its address, the number of calls and compute its share of cpu time.
30 * In the symbol-table, fields ADDR and FUNC_NAME are guaranteed
31 * to contain valid information. FILE may be 0, if unknown and
32 * LINE_NUM maybe 0 if unknown.
34 bfd_vma addr
; /* address of entry point */
35 bfd_vma end_addr
; /* end-address */
36 const char *name
; /* name of function this sym is from */
37 Source_File
*file
; /* source file symbol comes from */
38 int line_num
; /* source line number */
39 unsigned int is_func
:1, /* is this a function entry point? */
40 is_static
:1, /* is this a local (static) symbol? */
41 is_bb_head
:1, /* is this the head of a basic-blk? */
42 mapped
:1, /* this symbol was mapped to another name */
43 has_been_placed
:1; /* have we placed this symbol? */
44 unsigned long ncalls
; /* how many times executed */
45 int nuses
; /* how many times this symbol appears in
46 a particular context */
47 bfd_vma bb_addr
[NBBS
]; /* address of basic-block start */
48 unsigned long bb_calls
[NBBS
]; /* how many times basic-block was called */
49 struct sym
*next
; /* for building chains of syms */
50 struct sym
*prev
; /* for building chains of syms */
52 /* profile-specific information: */
54 /* histogram specific info: */
57 double time
; /* (weighted) ticks in this routine */
58 bfd_vma scaled_addr
; /* scaled entry point */
62 /* call-graph specific info: */
65 unsigned long self_calls
; /* how many calls to self */
66 double child_time
; /* cumulative ticks in children */
67 int index
; /* index in the graph list */
68 int top_order
; /* graph call chain top-sort order */
69 bool print_flag
; /* should this be printed? */
72 double fract
; /* what % of time propagates */
73 double self
; /* how much self time propagates */
74 double child
; /* how much child time propagates */
79 int num
; /* internal number of cycle on */
80 struct sym
*head
; /* head of cycle */
81 struct sym
*next
; /* next member of cycle */
84 struct arc
*parents
; /* list of caller arcs */
85 struct arc
*children
; /* list of callee arcs */
92 * Symbol-tables are always assumed to be sorted in increasing order
97 unsigned int len
; /* # of symbols in this table */
98 Sym
*base
; /* first element in symbol table */
99 Sym
*limit
; /* limit = base + len */
103 extern Sym_Table symtab
; /* the symbol table */
105 extern void sym_init
PARAMS ((Sym
* sym
));
106 extern void symtab_finalize
PARAMS ((Sym_Table
* symtab
));
107 extern Sym
*sym_lookup
PARAMS ((Sym_Table
* symtab
, bfd_vma address
));
109 extern void find_call
PARAMS ((Sym
*, bfd_vma
, bfd_vma
));
111 #endif /* symtab_h */