Messages in this thread | | | Date | Thu, 22 Jul 2010 10:20:44 +0300 | From | Gleb Natapov <> | Subject | perf annotate segfaults when source code has goto label that looks like hex number |
| |
The script below demonstrate this. The problem is in hist_entry__parse_objdump_line():
if (*tmp) { /* * Parse hexa addresses followed by ':' */ line_ip = strtoull(tmp, &tmp2, 16); if (*tmp2 != ':' || tmp == tmp2) line_ip = -1; } strtoull() returns valid number when it gets line with label and following test passes too. I can't think of a way to unambiguously distinguish between label and valid rip. May be running objdump with --prefix-addresses will help, but it may make other thing unambiguous.
=== script === cat > test.c << EOF int main(int argc, char **argv) { int i;
while(1) { i++; if (i == 10000000) goto add; } add: return 0; } EOF
gcc -g test.c perf record ./a.out perf annotate -- Gleb.
| |