diff options
author | Daniel Jacobowitz <drow@false.org> | 2007-07-03 15:32:20 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2007-07-03 15:32:20 +0000 |
commit | 9f43d28cb0b3e1e8fa7c4017c81b9ef81843ab4d (patch) | |
tree | dc72db2ac681c6d830630e589c6c2c1386bb045a | |
parent | 3cfad14c4a2b29ed8939e8e749b2a1c2f2b15f9e (diff) | |
download | gdb-9f43d28cb0b3e1e8fa7c4017c81b9ef81843ab4d.zip gdb-9f43d28cb0b3e1e8fa7c4017c81b9ef81843ab4d.tar.gz gdb-9f43d28cb0b3e1e8fa7c4017c81b9ef81843ab4d.tar.bz2 |
2007-07-03 Ilko Iliev <iliev@ronetix.at>
Daniel Jacobowitz <dan@codesourcery.com>
* symfile.c (print_transfer_performance): Avoid integer overflow.
Use larger units.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/symfile.c | 22 |
2 files changed, 24 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4848e0f..069c376 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2007-07-03 Ilko Iliev <iliev@ronetix.at> + Daniel Jacobowitz <dan@codesourcery.com> + + * symfile.c (print_transfer_performance): Avoid integer overflow. + Use larger units. + 2007-07-03 Markus Deuling <deuling@de.ibm.com> * cp-namespace.c (lookup_symbol_file): Add block to diff --git a/gdb/symfile.c b/gdb/symfile.c index f513dfa..8e4e03d 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -1947,7 +1947,7 @@ print_transfer_performance (struct ui_file *stream, const struct timeval *start_time, const struct timeval *end_time) { - unsigned long time_count; + ULONGEST time_count; /* Compute the elapsed time in milliseconds, as a tradeoff between accuracy and overflow. */ @@ -1957,9 +1957,23 @@ print_transfer_performance (struct ui_file *stream, ui_out_text (uiout, "Transfer rate: "); if (time_count > 0) { - ui_out_field_fmt (uiout, "transfer-rate", "%lu", - 1000 * (data_count * 8) / time_count); - ui_out_text (uiout, " bits/sec"); + unsigned long rate = ((ULONGEST) data_count * 1000) / time_count; + + if (ui_out_is_mi_like_p (uiout)) + { + ui_out_field_fmt (uiout, "transfer-rate", "%lu", rate * 8); + ui_out_text (uiout, " bits/sec"); + } + else if (rate < 1024) + { + ui_out_field_fmt (uiout, "transfer-rate", "%lu", rate); + ui_out_text (uiout, " bytes/sec"); + } + else + { + ui_out_field_fmt (uiout, "transfer-rate", "%lu", rate / 1024); + ui_out_text (uiout, " KB/sec"); + } } else { |