[Fwd: gdb patch]

Christopher Blizzard blizzard@mozilla.org
Mon May 8 08:25:00 GMT 2000


Did anyone merge this in?  I thought that the general consensus was that
it was a good thing.

--Chris

-------- Original Message --------
Subject: gdb patch
Date: Mon, 1 May 2000 08:24:52 -0400
From: "Jim Nance" <jnance@nortelnetworks.com>
To: blizzard@redhat.com

Hi Chris,
    I have updated my gdb "list -w" patch to work with the gdb from RH
6.2.
Could you pass it on to whereever it might need to go?

Thanks,

Jim
diff -ru gdb-19991004.orig/gdb/ChangeLog gdb-19991004/gdb/ChangeLog
--- gdb-19991004.orig/gdb/ChangeLog	Thu Apr 27 16:07:06 2000
+++ gdb-19991004/gdb/ChangeLog	Thu Apr 27 16:08:32 2000
@@ -3,6 +3,12 @@
 	* remote-rdi.c (arm_rdi_open): If the angel_RDI_Open fails, close
 	the serial port and raise an error.  If you try to go on, you will 
 	stall forever down in the rdi-share code.
+ 
+2000-04-24  Jim Nance   <jlnance@worldnet.att.net>
+
+ 	* source.c symtab.h: Added a -w option to the list command.  Allows
+ 	the currently executing line of code in the current stack frame to
+ 	be annotated.
 
 1999-10-04  Fernando Nasser  <fnasser@totem.to.cygnus.com>
 
diff -ru gdb-19991004.orig/gdb/source.c gdb-19991004/gdb/source.c
--- gdb-19991004.orig/gdb/source.c	Thu Apr 27 16:07:07 2000
+++ gdb-19991004/gdb/source.c	Thu Apr 27 16:12:02 2000
@@ -993,13 +993,14 @@
 /* Print source lines from the file of symtab S,
    starting with line number LINE and stopping before line number STOPLINE. */
 
-static void print_source_lines_base PARAMS ((struct symtab * s, int line, int stopline, int noerror));
-static void
-print_source_lines_base (s, line, stopline, noerror)
+void print_source_lines_base PARAMS ((struct symtab * s, int line, int stopline, int noerror, int markline));
+void
+print_source_lines_base (s, line, stopline, noerror, markline)
      struct symtab *s;
      int line;
      int stopline;
      int noerror;
+     int markline;
 {
   register int c;
   register int desc;
@@ -1065,8 +1066,11 @@
       c = fgetc (stream);
       if (c == EOF)
 	break;
-      last_line_listed = current_source_line;
-      printf_filtered ("%d\t", current_source_line++);
+      last_line_listed = current_source_line++;
+      if (last_line_listed != markline)
+        printf_filtered ("%d\t", last_line_listed);
+      else
+        printf_filtered ("%d >\t", last_line_listed);
       do
 	{
 	  if (c < 040 && c != '\t' && c != '\n' && c != '\r')
@@ -1101,7 +1105,7 @@
 #if defined(TUI)
   if (!tui_version ||
       m_winPtrIsNull (srcWin) || !srcWin->generic.isVisible)
-    print_source_lines_base (s, line, stopline, noerror);
+    print_source_lines_base (s, line, stopline, noerror, 0);
   else
     {
       TuiGenWinInfoPtr locator = locatorWinInfoPtr ();
@@ -1121,7 +1125,7 @@
       tuiDo ((TuiOpaqueFuncPtr) tui_vUpdateLocatorFilename, s->filename);
     }
 #else
-  print_source_lines_base (s, line, stopline, noerror);
+  print_source_lines_base (s, line, stopline, noerror, 0);
 #endif
 }
 
@@ -1143,6 +1147,18 @@
 		     sals->sals[i].symtab->filename, sals->sals[i].line);
 }
 
+static void printw (s, line, stopline, noerror)
+     struct symtab *s;
+     int line;
+     int stopline;
+     int noerror;
+{
+  int nlines = lines_to_list / 2;
+  int bline = line > nlines ? line - nlines : 1;
+  int eline = line + nlines;
+  print_source_lines_base (s, bline, eline, noerror, line);
+}
+
 static void
 list_command (arg, from_tty)
      char *arg;
@@ -1177,8 +1193,25 @@
       return;
     }
 
-  /* "l -" lists previous ten lines, the ones before the ten just listed.  */
-  if (STREQ (arg, "-"))
+  /* We check for 2 cases here:
+   *    "l -" lists previous ten lines, the ones before the ten just listed.
+   *    "l -w" gives a context listing showing the current position.
+  */
+  if (STREQN (arg, "-", 1))
+    if (STREQ (arg, "-w"))
+    {
+      extern void (*print_frame_info_listing_hook)
+	PARAMS ((struct symtab *s, int line, int stopline, int noerror));
+      void (*savefn)
+	PARAMS ((struct symtab *s, int line, int stopline, int noerror));
+      
+      savefn = print_frame_info_listing_hook;
+      print_frame_info_listing_hook = printw;
+      frame_command (NULL, 0);
+      print_frame_info_listing_hook = savefn;
+      return;
+    }
+    else
     {
       if (current_source_symtab == 0)
 	error ("No default source file yet.  Do \"help list\".");
@@ -1529,7 +1562,7 @@
 	  /* Match! */
 	  fclose (stream);
 	  if (tui_version)
-	    print_source_lines_base (current_source_symtab, line, line + 1, 0);
+	    print_source_lines_base (current_source_symtab, line, line+1, 0, 0);
 	  print_source_lines (current_source_symtab, line, line + 1, 0);
 	  set_internalvar (lookup_internalvar ("_"),
 			   value_from_longest (builtin_type_int,
@@ -1639,7 +1672,7 @@
 	  /* Match! */
 	  fclose (stream);
 	  if (tui_version)
-	    print_source_lines_base (current_source_symtab, line, line + 1, 0);
+	    print_source_lines_base (current_source_symtab, line, line+1, 0, 0);
 	  print_source_lines (current_source_symtab, line, line + 1, 0);
 	  set_internalvar (lookup_internalvar ("_"),
 			   value_from_longest (builtin_type_int,
@@ -1736,6 +1769,7 @@
   add_com ("list", class_files, list_command,
 	   concat ("List specified function or line.\n\
 With no argument, lists ten more lines after or around previous listing.\n\
+\"list -w\" lists the currently executing line of souce code with context.\n\
 \"list -\" lists the ten lines before a previous ten-line listing.\n\
 One argument specifies a line, and ten lines are listed around that line.\n\
 Two arguments with comma between specify starting and ending lines to list.\n\
diff -ru gdb-19991004.orig/gdb/symtab.h gdb-19991004/gdb/symtab.h
--- gdb-19991004.orig/gdb/symtab.h	Thu Apr 27 16:07:07 2000
+++ gdb-19991004/gdb/symtab.h	Thu Apr 27 16:08:32 2000
@@ -1427,6 +1427,9 @@
 identify_source_line PARAMS ((struct symtab *, int, int, CORE_ADDR));
 
 extern void
+print_source_lines_base PARAMS ((struct symtab *, int, int, int, int));
+
+extern void
 print_source_lines PARAMS ((struct symtab *, int, int, int));
 
 extern void



More information about the Gdb-patches mailing list