This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[commit] Use "pc" when there isn't a PC_REGNUM
- From: Andrew Cagney <ac131313 at redhat dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Fri, 02 May 2003 20:38:31 -0400
- Subject: [commit] Use "pc" when there isn't a PC_REGNUM
Hello,
I missed a case where core code thought it should have a PC_REGNUM.
This fixes it, by defaulting the name of the value returned by
get_frame_pc() to "pc". Note the comment though:
/* Name of the value returned by get_frame_pc(). Per comments, "pc"
is not a good name. */
if (PC_REGNUM >= 0)
/* OK, this is weird. The PC_REGNUM hardware register's value can
easily not match that of the internal value returned by
get_frame_pc(). */
pc_regname = REGISTER_NAME (PC_REGNUM);
else
/* But then, this is weird to. Even without PC_REGNUM, an
architectures will often have a hardware register called "pc",
and that register's value, again, can easily not match
get_frame_pc(). */
pc_regname = "pc";
committed,
Andrew
2003-05-02 Andrew Cagney <cagney@redhat.com>
* std-regs.c (value_of_builtin_frame_pc_reg): Delete #ifdef
PC_REGNUM, re-indent.
* stack.c (frame_info): Use "pc" for the name of get_frame_pc when
PC_REGNUM isn't set.
Index: stack.c
===================================================================
RCS file: /cvs/src/src/gdb/stack.c,v
retrieving revision 1.73
diff -u -r1.73 stack.c
--- stack.c 5 Apr 2003 15:19:12 -0000 1.73
+++ stack.c 3 May 2003 00:25:27 -0000
@@ -614,10 +614,25 @@
int i, count, numregs;
char *funname = 0;
enum language funlang = language_unknown;
+ const char *pc_regname;
if (!target_has_stack)
error ("No stack.");
+ /* Name of the value returned by get_frame_pc(). Per comments, "pc"
+ is not a good name. */
+ if (PC_REGNUM >= 0)
+ /* OK, this is weird. The PC_REGNUM hardware register's value can
+ easily not match that of the internal value returned by
+ get_frame_pc(). */
+ pc_regname = REGISTER_NAME (PC_REGNUM);
+ else
+ /* But then, this is weird to. Even without PC_REGNUM, an
+ architectures will often have a hardware register called "pc",
+ and that register's value, again, can easily not match
+ get_frame_pc(). */
+ pc_regname = "pc";
+
fi = parse_frame_specification (addr_exp);
if (fi == NULL)
error ("Invalid frame specified.");
@@ -680,7 +695,7 @@
print_address_numeric (get_frame_base (fi), 1, gdb_stdout);
printf_filtered (":\n");
}
- printf_filtered (" %s = ", REGISTER_NAME (PC_REGNUM));
+ printf_filtered (" %s = ", pc_regname);
print_address_numeric (get_frame_pc (fi), 1, gdb_stdout);
wrap_here (" ");
@@ -695,7 +710,7 @@
printf_filtered (" (%s:%d)", sal.symtab->filename, sal.line);
puts_filtered ("; ");
wrap_here (" ");
- printf_filtered ("saved %s ", REGISTER_NAME (PC_REGNUM));
+ printf_filtered ("saved %s ", pc_regname);
print_address_numeric (frame_pc_unwind (fi), 1, gdb_stdout);
printf_filtered ("\n");
Index: std-regs.c
===================================================================
RCS file: /cvs/src/src/gdb/std-regs.c,v
retrieving revision 1.5
diff -u -r1.5 std-regs.c
--- std-regs.c 29 Apr 2003 01:49:48 -0000 1.5
+++ std-regs.c 3 May 2003 00:25:28 -0000
@@ -98,20 +98,19 @@
static struct value *
value_of_builtin_frame_pc_reg (struct frame_info *frame)
{
-#ifdef PC_REGNUM
if (PC_REGNUM >= 0)
return value_of_register (PC_REGNUM, frame);
-#endif
- {
- struct value *val = allocate_value (builtin_type_void_data_ptr);
- char *buf = VALUE_CONTENTS_RAW (val);
- if (frame == NULL)
- memset (buf, TYPE_LENGTH (VALUE_TYPE (val)), 0);
- else
- ADDRESS_TO_POINTER (builtin_type_void_data_ptr, buf,
- get_frame_pc (frame));
- return val;
- }
+ else
+ {
+ struct value *val = allocate_value (builtin_type_void_data_ptr);
+ char *buf = VALUE_CONTENTS_RAW (val);
+ if (frame == NULL)
+ memset (buf, TYPE_LENGTH (VALUE_TYPE (val)), 0);
+ else
+ ADDRESS_TO_POINTER (builtin_type_void_data_ptr, buf,
+ get_frame_pc (frame));
+ return val;
+ }
}
static struct value *