This is the mail archive of the
insight@sourceware.org
mailing list for the Insight project.
[RFA] Eliminate use of `deprecated_selected_frame'.
- From: Kevin Buettner <kevinb at redhat dot com>
- To: insight at sourceware dot org
- Date: Tue, 13 Mar 2007 08:39:40 -0700
- Subject: [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);