aboutsummaryrefslogtreecommitdiffstats
path: root/tools/misc
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2010-01-29 08:59:46 +0000
committerKeir Fraser <keir.fraser@citrix.com>2010-01-29 08:59:46 +0000
commit8c3afa67ee971d5decee863cee842c58bc5c5d34 (patch)
tree021a9e312e08f3a343b4093f761b8fcc2439df5d /tools/misc
parentb7d8981f39e24bbba2b933c1d17828a47100b7c5 (diff)
downloadxen-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.c10
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;