* frame.h (SIZEOF_FRAME_SAVED_REGS): Report an error if macro
authorAndrew Cagney <cagney@redhat.com>
Wed, 21 Mar 2001 16:42:39 +0000 (16:42 +0000)
committerAndrew Cagney <cagney@redhat.com>
Wed, 21 Mar 2001 16:42:39 +0000 (16:42 +0000)
already defined.

From 2000-08-25 Stephane Carrez <Stephane.Carrez@worldnet.fr>:
* stabsread.c (define_symbol): A parameter ('R'), a local ('r'),
or a reference ('a') can be in a pseudo register.
* infcmd.c (do_registers_info): Must take into account the pseudo
registers to print their value.
(registers_info): Likewise.
* stack.c (frame_info): Likewise.
* frame.h (SIZEOF_FRAME_SAVED_REGS): Save the pseudo registers.

gdb/ChangeLog
gdb/frame.h
gdb/infcmd.c
gdb/stabsread.c
gdb/stack.c

index 0d076f9ac3b75702a7f74a1414dfe567a85601e2..6f3d3d8ac2bd4b2b1375247a70ec63d30b682753 100644 (file)
@@ -1,3 +1,17 @@
+2001-03-20  Andrew Cagney  <ac131313@redhat.com>
+
+       * frame.h (SIZEOF_FRAME_SAVED_REGS): Report an error if macro
+       already defined.
+       
+       From 2000-08-25 Stephane Carrez <Stephane.Carrez@worldnet.fr>:
+        * stabsread.c (define_symbol): A parameter ('R'), a local ('r'),
+        or a reference ('a') can be in a pseudo register.
+        * infcmd.c (do_registers_info): Must take into account the pseudo
+        registers to print their value.
+        (registers_info): Likewise.
+        * stack.c (frame_info): Likewise.
+        * frame.h (SIZEOF_FRAME_SAVED_REGS): Save the pseudo registers.
+
 2001-03-21  Eli Zaretskii  <eliz@is.elta.co.il>
 
        Unified support for hardware breakpoints and watchpoints on
index 561ae278ab1cdfbc13d378b5eb0283ea7f3081a4..5d9880183a2d7f8a766805729e7e434a8c7b0ccc 100644 (file)
@@ -81,7 +81,7 @@ struct frame_info
        address where the sp was saved.  */
     /* Allocated by frame_saved_regs_zalloc () which is called /
        initialized by FRAME_INIT_SAVED_REGS(). */
-    CORE_ADDR *saved_regs;     /*NUM_REGS */
+    CORE_ADDR *saved_regs;     /*NUM_REGS + NUM_PSEUDO_REGS*/
 
 #ifdef EXTRA_FRAME_INFO
     /* XXXX - deprecated */
@@ -114,11 +114,17 @@ enum print_what
     LOC_AND_ADDRESS 
   };
 
-/* Allocate additional space for appendices to a struct frame_info. */
+/* Allocate additional space for appendices to a struct frame_info.
+   NOTE: Much of GDB's code works on the assumption that the allocated
+   saved_regs[] array is the size specified below.  If you try to make
+   that array smaller, GDB will happily walk off its end. */
 
-#ifndef SIZEOF_FRAME_SAVED_REGS
-#define SIZEOF_FRAME_SAVED_REGS (sizeof (CORE_ADDR) * (NUM_REGS))
+#ifdef SIZEOF_FRAME_SAVED_REGS
+#error "SIZEOF_FRAME_SAVED_REGS can not be re-defined"
 #endif
+#define SIZEOF_FRAME_SAVED_REGS \
+        (sizeof (CORE_ADDR) * (NUM_REGS+NUM_PSEUDO_REGS))
+
 extern void *frame_obstack_alloc (unsigned long size);
 extern void frame_saved_regs_zalloc (struct frame_info *);
 
index 96a0fdd0de5f823a479a3bd90ec9577d16ff1e73..e6e951ffeca48bc3b45cc68878e7353048cd87b8 100644 (file)
@@ -1467,7 +1467,7 @@ void
 do_registers_info (int regnum, int fpregs)
 {
   register int i;
-  int numregs = NUM_REGS;
+  int numregs = NUM_REGS + NUM_PSEUDO_REGS;
 
   for (i = 0; i < numregs; i++)
     {
@@ -1591,7 +1591,7 @@ registers_info (char *addr_exp, int fpregs)
       end = addr_exp;
       while (*end != '\0' && *end != ' ' && *end != '\t')
        ++end;
-      numregs = NUM_REGS;
+      numregs = NUM_REGS + NUM_PSEUDO_REGS;
 
       regnum = target_map_name_to_register (addr_exp, end - addr_exp);
       if (regnum >= 0)
index ad6719fc22717037b0a5abd62468473745e244ad..bba3d094031a727ed90a3baa3fa971b0aa0b6a63 100644 (file)
@@ -1802,9 +1802,10 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_TYPE (sym) = read_type (&p, objfile);
       SYMBOL_CLASS (sym) = LOC_REGPARM;
       SYMBOL_VALUE (sym) = STAB_REG_TO_REGNUM (valu);
-      if (SYMBOL_VALUE (sym) >= NUM_REGS)
+      if (SYMBOL_VALUE (sym) >= NUM_REGS + NUM_PSEUDO_REGS)
        {
-         complain (&reg_value_complaint, SYMBOL_VALUE (sym), NUM_REGS,
+         complain (&reg_value_complaint, SYMBOL_VALUE (sym),
+                   NUM_REGS + NUM_PSEUDO_REGS,
                    SYMBOL_SOURCE_NAME (sym));
          SYMBOL_VALUE (sym) = SP_REGNUM;       /* Known safe, though useless */
        }
@@ -1817,9 +1818,10 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_TYPE (sym) = read_type (&p, objfile);
       SYMBOL_CLASS (sym) = LOC_REGISTER;
       SYMBOL_VALUE (sym) = STAB_REG_TO_REGNUM (valu);
-      if (SYMBOL_VALUE (sym) >= NUM_REGS)
+      if (SYMBOL_VALUE (sym) >= NUM_REGS + NUM_PSEUDO_REGS)
        {
-         complain (&reg_value_complaint, SYMBOL_VALUE (sym), NUM_REGS,
+         complain (&reg_value_complaint, SYMBOL_VALUE (sym),
+                   NUM_REGS + NUM_PSEUDO_REGS,
                    SYMBOL_SOURCE_NAME (sym));
          SYMBOL_VALUE (sym) = SP_REGNUM;       /* Known safe, though useless */
        }
@@ -2066,9 +2068,10 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_TYPE (sym) = read_type (&p, objfile);
       SYMBOL_CLASS (sym) = LOC_REGPARM_ADDR;
       SYMBOL_VALUE (sym) = STAB_REG_TO_REGNUM (valu);
-      if (SYMBOL_VALUE (sym) >= NUM_REGS)
+      if (SYMBOL_VALUE (sym) >= NUM_REGS + NUM_PSEUDO_REGS)
        {
-         complain (&reg_value_complaint, SYMBOL_VALUE (sym), NUM_REGS,
+         complain (&reg_value_complaint, SYMBOL_VALUE (sym),
+                   NUM_REGS + NUM_PSEUDO_REGS,
                    SYMBOL_SOURCE_NAME (sym));
          SYMBOL_VALUE (sym) = SP_REGNUM;       /* Known safe, though useless */
        }
index ebeb4d6311ed9c9951426c8572e8699fa13499aa..615444354b49256779a6e6f01f1e21b4bd638c1e 100644 (file)
@@ -1001,7 +1001,7 @@ frame_info (char *addr_exp, int from_tty)
       print_address_numeric (fi->saved_regs[SP_REGNUM], 1, gdb_stdout);
       printf_filtered ("\n");
       count = 0;
-      numregs = NUM_REGS;
+      numregs = NUM_REGS + NUM_PSEUDO_REGS;
       for (i = 0; i < numregs; i++)
        if (fi->saved_regs[i] && i != SP_REGNUM)
          {