This is the mail archive of the insight@sourceware.org mailing list for the Insight 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]

[RFA] Eliminate use of `deprecated_selected_frame'.


A recent change to GDB has removed the global variable
`deprecated_selected_frame'.  See:

    http://sourceware.org/ml/gdb-patches/2007-02/msg00283.html

As a consequence, insight no longer builds.  The patch below remedies
this situation.

The transformation would've been more straightforward had I chosen to
use deprecated_safe_get_selected_frame() instead of
get_selected_frame().  However, the name of the former suggests that
it too will be deleted someday, so I opted to use get_selected_frame()
instead.  When using get_selected_frame(), you must first make sure
that the target is running or else an error will occur.  I ended up
doing this by testing target_has_registers.  (In at least one
circumstance, the existing code already does this.) If
target_has_registers is non-zero, it should be safe to call
get_selected_frame().

The implementation of deprecated_safe_get_selected_frame() is as
follows:

  if (!target_has_registers || !target_has_stack || !target_has_memory)
    return NULL;
  return get_selected_frame (NULL);

But testing all of target_has_{registers,stack,memory} seems like
overkill to me.  I think that merely testing target_has_registers
will suffice.  I'm willing to revise my patch, however, if someone
thinks that these additional tests ought to be performed.

Okay?

Kevin


	* generic/gdbtk-cmds.c (gdb_loc): Eliminate use of
	`deprecated_selected_frame'.
	* generic/gdbtk-register.c (register_changed_p): Likewise.
	* generic/gdbtk-stack.c (gdb_block_vars, gdb_get_blocks)
	(gdb_get_vars_command, gdb_selected_block, gdb_selected_frame):
	Likewise.

Index: generic/gdbtk-cmds.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-cmds.c,v
retrieving revision 1.93
diff -u -p -r1.93 gdbtk-cmds.c
--- generic/gdbtk-cmds.c	25 Aug 2006 16:09:48 -0000	1.93
+++ generic/gdbtk-cmds.c	13 Mar 2007 15:15:24 -0000
@@ -2129,23 +2129,29 @@ gdb_loc (ClientData clientData, Tcl_Inte
           pc = entry_point_address ();
           sal = find_pc_line (pc, 0);
         }  
-      else if (deprecated_selected_frame
-	       && (get_frame_pc (deprecated_selected_frame) != read_pc ()))
-        {
-          /* Note - this next line is not correct on all architectures.
-	     For a graphical debugger we really want to highlight the 
-	     assembly line that called the next function on the stack.
-	     Many architectures have the next instruction saved as the
-	     pc on the stack, so what happens is the next instruction 
-	     is highlighted. FIXME */
-	  pc = get_frame_pc (deprecated_selected_frame);
-	  find_frame_sal (deprecated_selected_frame, &sal);
-	}
       else
-        {
-          pc = read_pc ();
-          sal = find_pc_line (pc, 0);
-        }
+	{
+	  struct frame_info *frame;
+
+	  frame = get_selected_frame (NULL);
+
+	  if (get_frame_pc (frame) != read_pc ())
+	    {
+	      /* Note - this next line is not correct on all architectures.
+		 For a graphical debugger we really want to highlight the 
+		 assembly line that called the next function on the stack.
+		 Many architectures have the next instruction saved as the
+		 pc on the stack, so what happens is the next instruction 
+		 is highlighted. FIXME */
+	      pc = get_frame_pc (frame);
+	      find_frame_sal (frame, &sal);
+	    }
+	  else
+	    {
+	      pc = read_pc ();
+	      sal = find_pc_line (pc, 0);
+	    }
+	}
     }
   else if (objc == 2)
     {
Index: generic/gdbtk-register.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-register.c,v
retrieving revision 1.29
diff -u -p -r1.29 gdbtk-register.c
--- generic/gdbtk-register.c	23 Dec 2005 18:23:16 -0000	1.29
+++ generic/gdbtk-register.c	13 Mar 2007 15:15:25 -0000
@@ -429,8 +429,8 @@ register_changed_p (int regnum, void *ar
 {
   char raw_buffer[MAX_REGISTER_SIZE];
 
-  if (deprecated_selected_frame == NULL
-      || !frame_register_read (deprecated_selected_frame, regnum, raw_buffer))
+  if (!target_has_registers
+      || !frame_register_read (get_selected_frame (NULL), regnum, raw_buffer))
     return;
 
   if (memcmp (&old_regs[regnum * MAX_REGISTER_SIZE], raw_buffer,
Index: generic/gdbtk-stack.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-stack.c,v
retrieving revision 1.22
diff -u -p -r1.22 gdbtk-stack.c
--- generic/gdbtk-stack.c	23 Dec 2005 18:23:16 -0000	1.22
+++ generic/gdbtk-stack.c	13 Mar 2007 15:15:25 -0000
@@ -97,13 +97,13 @@ gdb_block_vars (ClientData clientData, T
     }
 
   Tcl_SetListObj (result_ptr->obj_ptr, 0, NULL);
-  if (deprecated_selected_frame == NULL)
+  if (!target_has_registers)
     return TCL_OK;
 
   start = string_to_core_addr (Tcl_GetStringFromObj (objv[1], NULL));
   end   = string_to_core_addr (Tcl_GetStringFromObj (objv[2], NULL));
   
-  block = get_frame_block (deprecated_selected_frame, 0);
+  block = get_frame_block (get_selected_frame (NULL), 0);
 
   while (block != 0)
     {
@@ -168,10 +168,12 @@ gdb_get_blocks (ClientData clientData, T
 
   Tcl_SetListObj (result_ptr->obj_ptr, 0, NULL);
   
-  if (deprecated_selected_frame != NULL)
+  if (target_has_registers)
     {
-      block = get_frame_block (deprecated_selected_frame, 0);
-      pc = get_frame_pc (deprecated_selected_frame);
+      struct frame_info *frame = get_selected_frame (NULL);
+
+      block = get_frame_block (frame, 0);
+      pc = get_frame_pc (frame);
       while (block != 0)
 	{
 	  junk = 0;
@@ -317,10 +319,10 @@ gdb_get_vars_command (ClientData clientD
   else
     {
       /* Specified currently selected frame */
-      if (deprecated_selected_frame == NULL)
+      if (!target_has_registers)
 	return TCL_OK;
 
-      block = get_frame_block (deprecated_selected_frame, 0);
+      block = get_frame_block (get_selected_frame (NULL), 0);
     }
 
   while (block != 0)
@@ -387,7 +389,7 @@ gdb_selected_block (ClientData clientDat
   char *start = NULL;
   char *end   = NULL;
 
-  if (deprecated_selected_frame == NULL)
+  if (!target_has_registers)
     {
       xasprintf (&start, "%s", "");
       xasprintf (&end, "%s", "");
@@ -395,7 +397,7 @@ gdb_selected_block (ClientData clientDat
   else
     {
       struct block *block;
-      block = get_frame_block (deprecated_selected_frame, 0);
+      block = get_frame_block (get_selected_frame (NULL), 0);
       xasprintf (&start, "0x%s", paddr_nz (BLOCK_START (block)));
       xasprintf (&end, "0x%s", paddr_nz (BLOCK_END (block)));
     }
@@ -427,13 +429,13 @@ gdb_selected_frame (ClientData clientDat
 {
   char *frame;
 
-  if (deprecated_selected_frame == NULL)
+  if (!target_has_registers)
     xasprintf (&frame, "%s","");
   else
     /* FIXME: cagney/2002-11-19: This should be using get_frame_id()
        to identify the frame and *NOT* get_frame_base().  */
     xasprintf (&frame, "0x%s",
-	       paddr_nz (get_frame_base (deprecated_selected_frame)));
+	       paddr_nz (get_frame_base (get_selected_frame (NULL))));
 
   Tcl_SetStringObj (result_ptr->obj_ptr, frame, -1);
 


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