diff options
Diffstat (limited to 'gprof')
-rw-r--r-- | gprof/ChangeLog | 12 | ||||
-rw-r--r-- | gprof/alpha.c | 25 | ||||
-rw-r--r-- | gprof/cg_print.c | 9 | ||||
-rw-r--r-- | gprof/corefile.c | 36 | ||||
-rw-r--r-- | gprof/gprof.c | 1 | ||||
-rw-r--r-- | gprof/mips.c | 21 | ||||
-rw-r--r-- | gprof/sparc.c | 19 | ||||
-rw-r--r-- | gprof/tahoe.c | 31 | ||||
-rw-r--r-- | gprof/vax.c | 31 |
9 files changed, 89 insertions, 96 deletions
diff --git a/gprof/ChangeLog b/gprof/ChangeLog index 3de5a7a..6c1279c 100644 --- a/gprof/ChangeLog +++ b/gprof/ChangeLog @@ -1,3 +1,15 @@ +2009-02-12 Ken Werner <ken.werner@de.ibm.com> + + * corefile.c (core_create_function_syms): Remove "<locore>" and + "<hicore>" sentinels. + * gprof.c: Likewise. + * cg_print.c (cg_print_function_ordering): Likewise. + * alpha.c (alpha_find_call): Add check for return value of sym_lookup. + * mips.c (mips_find_call): Likewise. + * sparc.c (sparc_find_call): Likewise. + * tahoe.c (tahoe_find_call): Likewise. + * vax.c (vax_find_call): Likewise. + 2009-02-03 Carlos O'Donell <carlos@codesourcery.com> * configure.in: AC_SUBST pdfdir. diff --git a/gprof/alpha.c b/gprof/alpha.c index b14e842..1a3ebf9 100644 --- a/gprof/alpha.c +++ b/gprof/alpha.c @@ -148,17 +148,20 @@ alpha_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) if (hist_check_address (dest_pc)) { child = sym_lookup (&symtab, dest_pc); - DBG (CALLDEBUG, - printf (" 0x%lx\t; name=%s, addr=0x%lx", - (unsigned long) dest_pc, child->name, - (unsigned long) child->addr)); - if (child->addr == dest_pc || child->addr == dest_pc - 8) - { - DBG (CALLDEBUG, printf ("\n")); - /* a hit: */ - arc_add (parent, child, (unsigned long) 0); - continue; - } + if (child) + { + DBG (CALLDEBUG, + printf (" 0x%lx\t; name=%s, addr=0x%lx", + (unsigned long) dest_pc, child->name, + (unsigned long) child->addr)); + if (child->addr == dest_pc || child->addr == dest_pc - 8) + { + DBG (CALLDEBUG, printf ("\n")); + /* a hit: */ + arc_add (parent, child, (unsigned long) 0); + continue; + } + } } /* * Something funny going on. diff --git a/gprof/cg_print.c b/gprof/cg_print.c index 2557997..58ff608 100644 --- a/gprof/cg_print.c +++ b/gprof/cg_print.c @@ -804,13 +804,8 @@ cg_print_function_ordering () { if (symtab.base[index].ncalls == 0) { - /* Filter out gprof generated names. */ - if (strcmp (symtab.base[index].name, "<locore>") - && strcmp (symtab.base[index].name, "<hicore>")) - { - unused_syms[unused++] = &symtab.base[index]; - symtab.base[index].has_been_placed = 1; - } + unused_syms[unused++] = &symtab.base[index]; + symtab.base[index].has_been_placed = 1; } else { diff --git a/gprof/corefile.c b/gprof/corefile.c index 243a600..b3433c2 100644 --- a/gprof/corefile.c +++ b/gprof/corefile.c @@ -480,8 +480,7 @@ core_create_function_syms () done (1); } - /* The "+ 2" is for the sentinels. */ - symtab.base = (Sym *) xmalloc ((symtab.len + 2) * sizeof (Sym)); + symtab.base = (Sym *) xmalloc (symtab.len * sizeof (Sym)); /* Pass 2 - create symbols. */ symtab.limit = symtab.base; @@ -597,19 +596,6 @@ core_create_function_syms () ++symtab.limit; } - /* Create sentinels. */ - sym_init (symtab.limit); - symtab.limit->name = "<locore>"; - symtab.limit->addr = 0; - symtab.limit->end_addr = min_vma - 1; - ++symtab.limit; - - sym_init (symtab.limit); - symtab.limit->name = "<hicore>"; - symtab.limit->addr = max_vma + 1; - symtab.limit->end_addr = ~(bfd_vma) 0; - ++symtab.limit; - symtab.len = symtab.limit - symtab.base; symtab_finalize (&symtab); } @@ -623,7 +609,7 @@ core_create_line_syms () char *prev_name, *prev_filename; unsigned int prev_name_len, prev_filename_len; bfd_vma vma, min_vma = ~(bfd_vma) 0, max_vma = 0; - Sym *prev, dummy, *sentinel, *sym; + Sym *prev, dummy, *sym; const char *filename; int prev_line_num; Sym_Table ltab; @@ -744,7 +730,8 @@ core_create_line_syms () else { sym = sym_lookup(&symtab, ltab.limit->addr); - ltab.limit->is_static = sym->is_static; + if (sym) + ltab.limit->is_static = sym->is_static; } prev = ltab.limit; @@ -756,21 +743,6 @@ core_create_line_syms () ++ltab.limit; } - /* Update sentinels. */ - sentinel = sym_lookup (&symtab, (bfd_vma) 0); - - if (sentinel - && strcmp (sentinel->name, "<locore>") == 0 - && min_vma <= sentinel->end_addr) - sentinel->end_addr = min_vma - 1; - - sentinel = sym_lookup (&symtab, ~(bfd_vma) 0); - - if (sentinel - && strcmp (sentinel->name, "<hicore>") == 0 - && max_vma >= sentinel->addr) - sentinel->addr = max_vma + 1; - /* Copy in function symbols. */ memcpy (ltab.limit, symtab.base, symtab.len * sizeof (Sym)); ltab.limit += symtab.len; diff --git a/gprof/gprof.c b/gprof/gprof.c index e5e8863..26bec34 100644 --- a/gprof/gprof.c +++ b/gprof/gprof.c @@ -84,7 +84,6 @@ static char *default_excluded_list[] = { "_gprof_mcount", "mcount", "_mcount", "__mcount", "__mcount_internal", "__mcleanup", - "<locore>", "<hicore>", 0 }; diff --git a/gprof/mips.c b/gprof/mips.c index 7a7344d..2de87cf 100644 --- a/gprof/mips.c +++ b/gprof/mips.c @@ -74,16 +74,19 @@ mips_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) if (hist_check_address (dest_pc)) { child = sym_lookup (&symtab, dest_pc); - DBG (CALLDEBUG, - printf (" 0x%lx\t; name=%s, addr=0x%lx", - (unsigned long) dest_pc, child->name, - (unsigned long) child->addr)); - if (child->addr == dest_pc) + if (child) { - DBG (CALLDEBUG, printf ("\n")); - /* a hit: */ - arc_add (parent, child, (unsigned long) 0); - continue; + DBG (CALLDEBUG, + printf (" 0x%lx\t; name=%s, addr=0x%lx", + (unsigned long) dest_pc, child->name, + (unsigned long) child->addr)); + if (child->addr == dest_pc) + { + DBG (CALLDEBUG, printf ("\n")); + /* a hit: */ + arc_add (parent, child, (unsigned long) 0); + continue; + } } } /* Something funny going on. */ diff --git a/gprof/sparc.c b/gprof/sparc.c index 47592d8..44724c4 100644 --- a/gprof/sparc.c +++ b/gprof/sparc.c @@ -68,15 +68,18 @@ sparc_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) if (hist_check_address (dest_pc)) { child = sym_lookup (&symtab, dest_pc); - DBG (CALLDEBUG, - printf ("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n", - (unsigned long) dest_pc, child->name, - (unsigned long) child->addr)); - if (child->addr == dest_pc) + if (child) { - /* a hit: */ - arc_add (parent, child, (unsigned long) 0); - continue; + DBG (CALLDEBUG, + printf ("\tdest_pc=0x%lx, (name=%s, addr=0x%lx)\n", + (unsigned long) dest_pc, child->name, + (unsigned long) child->addr)); + if (child->addr == dest_pc) + { + /* a hit: */ + arc_add (parent, child, (unsigned long) 0); + continue; + } } } /* diff --git a/gprof/tahoe.c b/gprof/tahoe.c index c1d9c42..93d2997 100644 --- a/gprof/tahoe.c +++ b/gprof/tahoe.c @@ -298,21 +298,24 @@ tahoe_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) if (hist_check_address (destpc)) { child = sym_lookup (&symtab, destpc); - DBG (CALLDEBUG, - printf ("[findcall]\tdestpc 0x%lx", - (unsigned long) destpc); - printf (" child->name %s", child->name); - printf (" child->addr 0x%lx\n", - (unsigned long) child->addr); - ); - if (child->addr == destpc) + if (child) { - /* - * a hit - */ - arc_add (parent, child, (unsigned long) 0); - length += tahoe_operandlength (instructp + length); - continue; + DBG (CALLDEBUG, + printf ("[findcall]\tdestpc 0x%lx", + (unsigned long) destpc); + printf (" child->name %s", child->name); + printf (" child->addr 0x%lx\n", + (unsigned long) child->addr); + ); + if (child->addr == destpc) + { + /* + * a hit + */ + arc_add (parent, child, (unsigned long) 0); + length += tahoe_operandlength (instructp + length); + continue; + } } goto botched; } diff --git a/gprof/vax.c b/gprof/vax.c index a6904c1..99719b9 100644 --- a/gprof/vax.c +++ b/gprof/vax.c @@ -309,21 +309,24 @@ vax_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) if (hist_check_address (destpc)) { child = sym_lookup (&symtab, destpc); - DBG (CALLDEBUG, - printf ("[findcall]\tdestpc 0x%lx", - (unsigned long) destpc); - printf (" child->name %s", child->name); - printf (" child->addr 0x%lx\n", - (unsigned long) child->addr); - ); - if (child->addr == destpc) + if (child) { - /* - * a hit - */ - arc_add (parent, child, (unsigned long) 0); - length += vax_operandlength (instructp + length); - continue; + DBG (CALLDEBUG, + printf ("[findcall]\tdestpc 0x%lx", + (unsigned long) destpc); + printf (" child->name %s", child->name); + printf (" child->addr 0x%lx\n", + (unsigned long) child->addr); + ); + if (child->addr == destpc) + { + /* + * a hit + */ + arc_add (parent, child, (unsigned long) 0); + length += vax_operandlength (instructp + length); + continue; + } } goto botched; } |