X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gprof%2Ftahoe.c;h=93d2997ea913571f2d19ea3e1a4303dc7a583381;hb=64dd13dfc267b1d13f42519f220e89a4386591fd;hp=fa88ff07309de64714e61d6a50c9a41eb9c12d27;hpb=2ee563b53258d390d7446e90a67f465d504ae44c;p=deliverable%2Fbinutils-gdb.git diff --git a/gprof/tahoe.c b/gprof/tahoe.c index fa88ff0730..93d2997ea9 100644 --- a/gprof/tahoe.c +++ b/gprof/tahoe.c @@ -58,15 +58,14 @@ typedef enum tahoe_opermodes tahoe_operandenum; */ static Sym indirectchild; -static tahoe_operandenum tahoe_operandmode PARAMS ((unsigned char *)); -static char *tahoe_operandname PARAMS ((tahoe_operandenum)); -static long tahoe_operandlength PARAMS ((unsigned char *)); -static bfd_signed_vma tahoe_offset PARAMS ((unsigned char *)); -void tahoe_find_call PARAMS ((Sym *, bfd_vma, bfd_vma)); +static tahoe_operandenum tahoe_operandmode (unsigned char *); +static char *tahoe_operandname (tahoe_operandenum); +static long tahoe_operandlength (unsigned char *); +static bfd_signed_vma tahoe_offset (unsigned char *); +void tahoe_find_call (Sym *, bfd_vma, bfd_vma); static tahoe_operandenum -tahoe_operandmode (modep) - unsigned char *modep; +tahoe_operandmode (unsigned char *modep) { long usesreg = *modep & 0xf; @@ -107,8 +106,7 @@ tahoe_operandmode (modep) } static char * -tahoe_operandname (mode) - tahoe_operandenum mode; +tahoe_operandname (tahoe_operandenum mode) { switch (mode) @@ -161,8 +159,8 @@ tahoe_operandname (mode) } static long -tahoe_operandlength (modep) - unsigned char *modep; +tahoe_operandlength (unsigned char *modep +) { switch (tahoe_operandmode (modep)) @@ -199,8 +197,7 @@ tahoe_operandlength (modep) } static bfd_signed_vma -tahoe_offset (modep) - unsigned char *modep; +tahoe_offset (unsigned char *modep) { tahoe_operandenum mode = tahoe_operandmode (modep); @@ -220,10 +217,7 @@ tahoe_offset (modep) } void -tahoe_find_call (parent, p_lowpc, p_highpc) - Sym *parent; - bfd_vma p_lowpc; - bfd_vma p_highpc; +tahoe_find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc) { unsigned char *instructp; long length; @@ -231,28 +225,16 @@ tahoe_find_call (parent, p_lowpc, p_highpc) tahoe_operandenum mode; tahoe_operandenum firstmode; bfd_vma pc, destpc; - static boolean inited = false; + static bfd_boolean inited = FALSE; if (!inited) { - inited = true; + inited = TRUE; sym_init (&indirectchild); indirectchild.cg.prop.fract = 1.0; indirectchild.cg.cyc.head = &indirectchild; } - if (core_text_space == 0) - { - return; - } - if (p_lowpc < s_lowpc) - { - p_lowpc = s_lowpc; - } - if (p_highpc > s_highpc) - { - p_highpc = s_highpc; - } DBG (CALLDEBUG, printf ("[findcall] %s: 0x%lx to 0x%lx\n", parent->name, (unsigned long) p_lowpc, (unsigned long) p_highpc)); @@ -313,24 +295,27 @@ tahoe_find_call (parent, p_lowpc, p_highpc) * a function. */ destpc = pc + tahoe_offset (instructp + length); - if (destpc >= s_lowpc && destpc <= s_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; }