diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2010-01-29 08:59:46 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2010-01-29 08:59:46 +0000 |
commit | 8c3afa67ee971d5decee863cee842c58bc5c5d34 (patch) | |
tree | 021a9e312e08f3a343b4093f761b8fcc2439df5d /tools/misc | |
parent | b7d8981f39e24bbba2b933c1d17828a47100b7c5 (diff) | |
download | xen-8c3afa67ee971d5decee863cee842c58bc5c5d34.tar.gz xen-8c3afa67ee971d5decee863cee842c58bc5c5d34.tar.bz2 xen-8c3afa67ee971d5decee863cee842c58bc5c5d34.zip |
tools/gtraceview: fix SIGFPE
If there are 0 or 1 valid record in xentrace file,
SIGFPE will occur. Fix it.
Signed-off-by: Yu Zhiguo <yuzg@cn.fujitsu.com>
Diffstat (limited to 'tools/misc')
-rw-r--r-- | tools/misc/gtraceview.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/tools/misc/gtraceview.c b/tools/misc/gtraceview.c index 52b7ae2846..3bfedad654 100644 --- a/tools/misc/gtraceview.c +++ b/tools/misc/gtraceview.c @@ -209,6 +209,11 @@ int main(int argc, char *argv[]) if (load_file(fname)) exit(EXIT_FAILURE); + if (!data_cur) { + fprintf(stderr, "file %s doesn't contain any valid record\n", fname); + exit(EXIT_FAILURE); + } + if (mode_init()) exit(EXIT_FAILURE); @@ -939,14 +944,15 @@ int time_mode_rebuild(uint64_t start_time, uint64_t time_scale) struct cpu cur_state[MAX_CPU_NR]; uint64_t tsc = start_time; struct state *state; - uint64_t number, temp; + uint64_t number, temp = 0; int state_cur = 0; for (i = 0; i < max_cpu_num; i++) cur_state[i].flag = FLAG_UNKNOWN; /* allocate spaces, it may be huge... */ - temp = (data[data_cur-1].tsc - start_time)/time_scale; + if (time_scale) + temp = (data[data_cur-1].tsc - start_time)/time_scale; number = 10000UL; if (temp < number) number = temp; |