From e9de8a2eb63feb4c9b0f094585ebc8d281026465 Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Thu, 30 Apr 2009 14:14:37 +0200 Subject: [PATCH] --- yaml --- r: 147411 b: refs/heads/master c: bad760089c1ef7fe525c0f268a4078b9cb483903 h: refs/heads/master i: 147409: 0e6c70e266b980a5d6fd22248dc21cea013e183a 147407: abbbec742ed24e775e6c5a5ef3843645567c5be9 v: v3 --- [refs] | 2 +- .../Documentation/perf_counter/perf-report.cc | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 6ae5fc3011e7..c004cf04026f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 66cf782996f3d57d3cc199f0a2d47a54e2aa5991 +refs/heads/master: bad760089c1ef7fe525c0f268a4078b9cb483903 diff --git a/trunk/Documentation/perf_counter/perf-report.cc b/trunk/Documentation/perf_counter/perf-report.cc index 1727317352bf..933a07544534 100644 --- a/trunk/Documentation/perf_counter/perf-report.cc +++ b/trunk/Documentation/perf_counter/perf-report.cc @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -226,7 +227,7 @@ void load_kallsyms(void) while (!feof(file)) { uint64_t start; char c; - char sym[1024]; + char sym[1024000]; if (getline(&line, &n, file) < 0) break; @@ -416,12 +417,23 @@ int main(int argc, char *argv[]) if (head + event->header.size >= page_size * mmap_window) { unsigned long shift = page_size * (head / page_size); + int ret; + + ret = munmap(buf, page_size * mmap_window); + assert(ret == 0); - munmap(buf, page_size * mmap_window); offset += shift; head -= shift; goto remap; } + + + if (!event->header.size) { + fprintf(stderr, "zero-sized event at file offset %ld\n", offset + head); + fprintf(stderr, "skipping %ld bytes of events.\n", stat.st_size - offset - head); + goto done; + } + head += event->header.size; if (event->header.misc & PERF_EVENT_MISC_OVERFLOW) { @@ -458,6 +470,8 @@ int main(int argc, char *argv[]) if (offset + head < stat.st_size) goto more; +done: + close(input); std::map::iterator hi = hist.begin();