[binutils-gdb] Jump visualization: Handle the case where the disassembled bytes occupy two lines.

Nick Clifton nickc@sourceware.org
Thu Feb 6 13:17:00 GMT 2020


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

commit ece128295ef0054aad15501395bbd254c263dc56
Author: Thomas Troeger <tstroege@gmx.de>
Date:   Thu Feb 6 13:17:19 2020 +0000

    Jump visualization: Handle the case where the disassembled bytes occupy two lines.
    
    	* objdump.c (print_jump_visualisation): New function.
    	(disassemble_bytes): Call new function.

Diff:
---
 binutils/ChangeLog |  5 ++++
 binutils/objdump.c | 85 ++++++++++++++++++++++++++++++------------------------
 2 files changed, 53 insertions(+), 37 deletions(-)

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 7dc97db..2f383eb 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,8 @@
+2020-02-06  Thomas Troeger  <tstroege@gmx.de>
+
+	* objdump.c (print_jump_visualisation): New function.
+	(disassemble_bytes): Call new function.
+
 2020-02-06  Alan Modra  <amodra@gmail.com>
 
 	* testsuite/lib/binutils-common.exp (match_target): Accept '!' before
diff --git a/binutils/objdump.c b/binutils/objdump.c
index 17c0637..8182dcc 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -2474,6 +2474,47 @@ null_print (const void * stream ATTRIBUTE_UNUSED, const char * format ATTRIBUTE_
   return 1;
 }
 
+/* Print out jump visualization.  */
+
+static void
+print_jump_visualisation (bfd_vma addr, int max_level, char *line_buffer,
+			  uint8_t *color_buffer)
+{
+  if (!line_buffer)
+    return;
+
+  jump_info_visualize_address (addr, max_level, line_buffer, color_buffer);
+
+  size_t line_buffer_size = strlen (line_buffer);
+  char last_color = 0;
+  size_t i;
+
+  for (i = 0; i <= line_buffer_size; ++i)
+    {
+      if (color_output)
+	{
+	  uint8_t color = (i < line_buffer_size) ? color_buffer[i]: 0;
+
+	  if (color != last_color)
+	    {
+	      if (color)
+		if (extended_color_output)
+		  /* Use extended 8bit color, but
+		     do not choose dark colors.  */
+		  printf ("\033[38;5;%dm", 124 + (color % 108));
+		else
+		  /* Use simple terminal colors.  */
+		  printf ("\033[%dm", 31 + (color % 7));
+	      else
+		/* Clear color.  */
+		printf ("\033[0m");
+	      last_color = color;
+	    }
+	}
+      putchar ((i < line_buffer_size) ? line_buffer[i]: ' ');
+    }
+}
+
 /* Disassemble some data in memory between given values.  */
 
 static void
@@ -2632,43 +2673,9 @@ disassemble_bytes (struct disassemble_info * inf,
 	      putchar (' ');
 	    }
 
-	  /* Visualize jumps. */
-	  if (line_buffer)
-	    {
-	      jump_info_visualize_address (section->vma + addr_offset,
-					   max_level,
-					   line_buffer,
-					   color_buffer);
-
-	      size_t line_buffer_size = strlen (line_buffer);
-	      char last_color = 0;
-	      size_t i;
-
-	      for (i = 0; i <= line_buffer_size; ++i)
-		{
-		  if (color_output)
-		    {
-		      uint8_t color = (i < line_buffer_size) ? color_buffer[i]: 0;
-
-		      if (color != last_color)
-			{
-			  if (color)
-			    if (extended_color_output)
-			      /* Use extended 8bit color, but
-			         do not choose dark colors.  */
-			      printf ("\033[38;5;%dm", 124 + (color % 108));
-			    else
-			      /* Use simple terminal colors.  */
-			      printf ("\033[%dm", 31 + (color % 7));
-			  else
-			    /* Clear color.  */
-			    printf ("\033[0m");
-			  last_color = color;
-			}
-		    }
-		  putchar ((i < line_buffer_size) ? line_buffer[i]: ' ');
-		}
-	    }
+	  print_jump_visualisation (section->vma + addr_offset,
+				    max_level, line_buffer,
+				    color_buffer);
 
 	  if (insns)
 	    {
@@ -2860,6 +2867,10 @@ disassemble_bytes (struct disassemble_info * inf,
 		    *--s = '0';
 		  printf ("%s:\t", buf + skip_addr_chars);
 
+		  print_jump_visualisation (section->vma + j / opb,
+					    max_level, line_buffer,
+					    color_buffer);
+
 		  pb += octets_per_line;
 		  if (pb > octets)
 		    pb = octets;



More information about the Binutils-cvs mailing list