From 9f43d28cb0b3e1e8fa7c4017c81b9ef81843ab4d Mon Sep 17 00:00:00 2001
From: Daniel Jacobowitz <drow@false.org>
Date: Tue, 3 Jul 2007 15:32:20 +0000
Subject: [PATCH] 2007-07-03  Ilko Iliev  <iliev@ronetix.at> 	    Daniel
 Jacobowitz  <dan@codesourcery.com>

	* symfile.c (print_transfer_performance): Avoid integer overflow.
	Use larger units.
---
 gdb/ChangeLog |  6 ++++++
 gdb/symfile.c | 22 ++++++++++++++++++----
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4848e0f4741..069c376254e 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 f513dfa6f1b..8e4e03d8aa4 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
     {
-- 
GitLab