This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB 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]

[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 *

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