lkml.org 
[lkml]   [2010]   [Jul]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v2] Re: perf annotate segfaults when source code has goto label that looks like hex number
    On Thu, Jul 22, 2010 at 02:05:42PM -0300, Arnaldo Carvalho de Melo wrote:
    > Em Thu, Jul 22, 2010 at 01:52:22PM -0300, Arnaldo Carvalho de Melo escreveu:
    > > Em Thu, Jul 22, 2010 at 01:47:11PM -0300, Arnaldo Carvalho de Melo escreveu:
    > > > Em Thu, Jul 22, 2010 at 07:38:51PM +0300, Gleb Natapov escreveu:
    > > > > On Thu, Jul 22, 2010 at 11:33:45AM -0300, Arnaldo Carvalho de Melo wrote:
    > > > > > Can you try the attached patch?
    > > > > >
    > > > > I can, only later. But if I underhand your patch correctly perf will
    > > > > still crash if there is a comment after the label on the same line.
    > > >
    > > > Possibly, will try that now.
    > >
    > > It could be a comment of play code, like:
    > >
    > > [root@emilia ~]# cat test.c
    > > int main(int argc, char **argv)
    > > {
    > > int i;
    > >
    > > while(1) {
    > > i++;
    > > if (i == 10000000)
    > > goto add;
    > > }
    > > add: return 0;
    > > }
    > > [root@emilia ~]#
    > >
    > > back to the drawing board :-\
    >
    > What about this one?
    >
    > diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
    > index 699cf81..96e9044 100644
    > --- a/tools/perf/util/hist.c
    > +++ b/tools/perf/util/hist.c
    > @@ -976,13 +976,15 @@ static int hist_entry__parse_objdump_line(struct hist_entry *self, FILE *file,
    > * Parse hexa addresses followed by ':'
    > */
    > line_ip = strtoull(tmp, &tmp2, 16);
    > - if (*tmp2 != ':' || tmp == tmp2)
    > + if (*tmp2 != ':' || tmp == tmp2 || tmp2[1] == '\0')
    > line_ip = -1;
    > }
    >
    > if (line_ip != -1) {
    > u64 start = map__rip_2objdump(self->ms.map, sym->start);
    > offset = line_ip - start;
    > + if (offset < 0 || (u64)line_ip > sym->end)
    > + offset = -1;
    > }
    >
    This part is good idea anyway. Even if label will be interpreted as ip
    perf at least will not crash. It may miss-report something if check will
    accidentally succeed though.

    > objdump_line = objdump_line__new(offset, line);

    --
    Gleb.


    \
     
     \ /
      Last update: 2010-07-22 20:09    [W:0.027 / U:0.312 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site