This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Limit objdump -S context lines


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=43339b1d1cac16ee3e3b556ff5ab3f031d03b5eb

commit 43339b1d1cac16ee3e3b556ff5ab3f031d03b5eb
Author: Alan Modra <amodra@gmail.com>
Date:   Fri Jun 24 10:50:25 2016 +0930

    Limit objdump -S context lines
    
    Showing context lines is confusing in many cases, an obvious example
    being loops.
    
    	* objdump.c (struct print_file_list): Add "max_printed".
    	(try_print_file_open): Init new field.
    	(show_line): Don't show 5 context lines when redisplaying source.

Diff:
---
 binutils/ChangeLog |  6 ++++++
 binutils/objdump.c | 13 +++++++++++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 201b466..757aa98 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,9 @@
+2016-06-24  Alan Modra  <amodra@gmail.com>
+
+	* objdump.c (struct print_file_list): Add "max_printed".
+	(try_print_file_open): Init new field.
+	(show_line): Don't show 5 context lines when redisplaying source.
+
 2016-06-22  Nick Clifton  <nickc@redhat.com>
 
 	* testsuite/binutils-all/ar.exp: Skip tests for Alpha target.
diff --git a/binutils/objdump.c b/binutils/objdump.c
index 5b84801..174596e 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -1135,6 +1135,7 @@ struct print_file_list
   const char **linemap;
   unsigned maxline;
   unsigned last_line;
+  unsigned max_printed;
   int first;
 };
 
@@ -1260,6 +1261,7 @@ try_print_file_open (const char *origname, const char *modname)
 
   p->linemap = index_file (p->map, p->mapsize, &p->maxline);
   p->last_line = 0;
+  p->max_printed = 0;
   p->filename = origname;
   p->modname = modname;
   p->next = print_files;
@@ -1447,10 +1449,17 @@ show_line (bfd *abfd, asection *section, bfd_vma addr_offset)
 	      l = linenumber - SHOW_PRECEDING_CONTEXT_LINES;
 	      if (l >= linenumber)
 		l = 1;
-	      if (p->last_line >= l && p->last_line <= linenumber)
-		l = p->last_line + 1;
+	      if (p->max_printed >= l)
+		{
+		  if (p->max_printed < linenumber)
+		    l = p->max_printed + 1;
+		  else
+		    l = linenumber;
+		}
 	    }
 	  dump_lines (p, l, linenumber);
+	  if (p->max_printed < linenumber)
+	    p->max_printed = linenumber;
 	  p->last_line = linenumber;
 	  p->first = 0;
 	}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]