diff options
author | Jeff Law <law@redhat.com> | 1995-12-31 06:36:30 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 1995-12-31 06:36:30 +0000 |
commit | 64c50fc5db62e96b429cd2f2e166e878569f4a15 (patch) | |
tree | 440c0e7c9b11ad2afa68adf0a5b3e1ccb7106ca5 /gprof/cg_arcs.c | |
parent | 71128bd7a98889baab8044ccc1138a62371dda4c (diff) | |
download | gdb-64c50fc5db62e96b429cd2f2e166e878569f4a15.zip gdb-64c50fc5db62e96b429cd2f2e166e878569f4a15.tar.gz gdb-64c50fc5db62e96b429cd2f2e166e878569f4a15.tar.bz2 |
* gprof.c (long_options): Add "--function-ordering" and
"--file-ordering" options.
(usage): Add new options to usage message.
(main): Handle new options.
* gprof.h (STYLE_FUNCTION_ORDER): Define.
(STYLE_FILE_ORDER): Define.
(function_mapping_file): Declare.
* cg_arcs.c (arcs, numarcs): New globals.
(arc_add): Put new arcs into the arc array so the function/file
ordering code can examine them.
* cg_arcs.h (struct arc): New field "has_been_placed".
(arcs, numarcs): Declare new globals.
* core.c (symbol_map, symbol_map_count): New globals.
(read_function_mappings): New function to read in a function
to object map file.
(core_init): Call read_function_mappings if a function mapping
file exists.
(core_create_function_syms): Handle function to object file
mappings.
* symtab.h (struct sym): New fields "mapped", "has_been_placed",
"nuses", "prev".
* cg_print.c (cmp_arc_count): New function for sorting arcs.
(cmp_fun_nuses): Likewise for functions.
(cg_print_function_ordering): New function to print a suggested
function ordering.
(cg_print_file_ordering): Likewise for ordering .o files.
(order_and_dump_functions_by_arcs): Helper function for function
and object file ordering code.
Gprof changes for mentor vm work.
Diffstat (limited to 'gprof/cg_arcs.c')
-rw-r--r-- | gprof/cg_arcs.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/gprof/cg_arcs.c b/gprof/cg_arcs.c index 8b6184b..c6431e4 100644 --- a/gprof/cg_arcs.c +++ b/gprof/cg_arcs.c @@ -27,6 +27,8 @@ Sym *cycle_header; int num_cycles; +Arc **arcs; +int numarcs; /* * Return TRUE iff PARENT has an arc to covers the address @@ -65,7 +67,8 @@ void DEFUN (arc_add, (parent, child, count), Sym * parent AND Sym * child AND int count) { - Arc *arc; + static int maxarcs = 0; + Arc *arc, **newarcs; DBG (TALLYDEBUG, printf ("[arc_add] %d arcs from %s to %s\n", count, parent->name, child->name)); @@ -85,6 +88,37 @@ DEFUN (arc_add, (parent, child, count), arc->child = child; arc->count = count; + /* If this isn't an arc for a recursive call to parent, then add it + to the array of arcs. */ + if (parent != child) + { + /* If we've exhausted space in our current array, get a new one + and copy the contents. We might want to throttle the doubling + factor one day. */ + if (numarcs == maxarcs) + { + /* Determine how much space we want to allocate. */ + if (maxarcs == 0) + maxarcs = 1; + maxarcs *= 2; + + /* Allocate the new array. */ + newarcs = (Arc **)xmalloc(sizeof (Arc *) * maxarcs); + + /* Copy the old array's contents into the new array. */ + bcopy (arcs, newarcs, numarcs * sizeof (Arc *)); + + /* Free up the old array. */ + free (arcs); + + /* And make the new array be the current array. */ + arcs = newarcs; + } + + /* Place this arc in the arc array. */ + arcs[numarcs++] = arc; + } + /* prepend this child to the children of this parent: */ arc->next_child = parent->cg.children; parent->cg.children = arc; |