aboutsummaryrefslogtreecommitdiff
path: root/gprof/symtab.h
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@cygnus>1995-02-07 22:34:18 +0000
committerKen Raeburn <raeburn@cygnus>1995-02-07 22:34:18 +0000
commit5489fcc3d9dbb1f529dddb19b615e23d8ed59dc7 (patch)
tree1a79cfffd92f2afb67780dd7372c1759c49791aa /gprof/symtab.h
parent2559e01429d193b7957c106a6a8b0598476f9845 (diff)
downloadgdb-5489fcc3d9dbb1f529dddb19b615e23d8ed59dc7.zip
gdb-5489fcc3d9dbb1f529dddb19b615e23d8ed59dc7.tar.gz
gdb-5489fcc3d9dbb1f529dddb19b615e23d8ed59dc7.tar.bz2
Lots of changes from David Mosberger-Tang; see ChangeLog and NOTES for details:
Alpha support. Long options. New file format to support more information; backwards compatibility. Line-level profiling, on systems where bfd_find_nearest_line works. Selective display of data.
Diffstat (limited to 'gprof/symtab.h')
-rw-r--r--gprof/symtab.h88
1 files changed, 88 insertions, 0 deletions
diff --git a/gprof/symtab.h b/gprof/symtab.h
new file mode 100644
index 0000000..1702a9c
--- /dev/null
+++ b/gprof/symtab.h
@@ -0,0 +1,88 @@
+#ifndef symtab_h
+#define symtab_h
+
+#include "bfd.h"
+#include "gprof.h"
+
+/*
+ * For a profile to be intelligible to a human user, it is necessary
+ * to map code-addresses into source-code information. Source-code
+ * information can be any combination of: (i) function-name, (ii)
+ * source file-name, and (iii) source line number.
+ *
+ * The symbol table is used to map addresses into source-code
+ * information.
+ */
+
+#include "source.h"
+
+/*
+ * Symbol-entry. For each external in the specified file we gather
+ * its address, the number of calls and compute its share of cpu time.
+ */
+typedef struct sym {
+ /*
+ * Common information:
+ *
+ * In the symbol-table, fields ADDR and FUNC_NAME are guaranteed
+ * to contain valid information. FILE may be 0, if unknown and
+ * LINE_NUM maybe 0 if unknown.
+ */
+ bfd_vma addr; /* address of entry point */
+ bfd_vma end_addr; /* end-address */
+ const char *name; /* name of function this sym is from */
+ Source_File *file; /* source file symbol comes from */
+ int line_num; /* source line number */
+ unsigned int is_func : 1, /* is this a function entry point? */
+ is_static : 1, /* is this a local (static) symbol? */
+ is_bb_head : 1; /* is this the head of a basic-blk? */
+ int ncalls; /* how many times executed */
+ struct sym *next; /* for building chains of syms */
+
+ /* profile-specific information: */
+
+ /* histogram specific info: */
+ struct {
+ double time; /* (weighted) ticks in this routine */
+ bfd_vma scaled_addr; /* scaled entry point */
+ } hist;
+
+ /* call-graph specific info: */
+ struct {
+ int self_calls; /* how many calls to self */
+ double child_time; /* cumulative ticks in children */
+ int index; /* index in the graph list */
+ int top_order; /* graph call chain top-sort order */
+ bool print_flag; /* should this be printed? */
+ struct {
+ double fract; /* what % of time propagates */
+ double self; /* how much self time propagates */
+ double child; /* how much child time propagates */
+ } prop;
+ struct {
+ int num; /* internal number of cycle on */
+ struct sym *head; /* head of cycle */
+ struct sym *next; /* next member of cycle */
+ } cyc;
+ struct arc *parents; /* list of caller arcs */
+ struct arc *children; /* list of callee arcs */
+ } cg;
+} Sym;
+
+/*
+ * Symbol-tables are always assumed to be sorted in increasing order
+ * of addresses:
+ */
+typedef struct {
+ int len; /* # of symbols in this table */
+ Sym *base; /* first element in symbol table */
+ Sym *limit; /* limit = base + len */
+} Sym_Table;
+
+extern Sym_Table symtab; /* the symbol table */
+
+extern void sym_init PARAMS((Sym *sym));
+extern void symtab_finalize PARAMS((Sym_Table *symtab));
+extern Sym *sym_lookup PARAMS((Sym_Table *symtab, bfd_vma address));
+
+#endif /* symtab_h */