X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gprof%2Ftahoe.c;h=93d2997ea913571f2d19ea3e1a4303dc7a583381;hb=9ef9e6a6a0dd8f948708cb67c9afcfd0be40cb0a;hp=1e7da7df0ace31ce6e48e6c6537b0805be7edfad;hpb=b34976b65aea8f33690229600bbf4527ec3118e1;p=deliverable%2Fbinutils-gdb.git diff --git a/gprof/tahoe.c b/gprof/tahoe.c index 1e7da7df0a..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; @@ -241,18 +235,6 @@ tahoe_find_call (parent, p_lowpc, p_highpc) 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; }