2004-11-12 Andrew Cagney <cagney@gnu.org>
authorAndrew Cagney <cagney@redhat.com>
Sat, 13 Nov 2004 02:29:48 +0000 (02:29 +0000)
committerAndrew Cagney <cagney@redhat.com>
Sat, 13 Nov 2004 02:29:48 +0000 (02:29 +0000)
* defs.h (enum lval_type): Delete lval_reg_frame_relative.
* value.h (struct value): Update comment.
* valops.c (value_assign): Fold lval_reg_fame_relative into
lval_register.
* findvar.c (value_from_register, locate_var_value): Ditto.

gdb/ChangeLog
gdb/defs.h
gdb/findvar.c
gdb/valops.c
gdb/value.h

index d056e6600ce14cc27086e726adf14cc3f93bc6a0..5bb6c6d0732ef46cf6b0b592de5114ae914bdb3d 100644 (file)
@@ -1,3 +1,11 @@
+2004-11-12  Andrew Cagney  <cagney@gnu.org>
+
+       * defs.h (enum lval_type): Delete lval_reg_frame_relative.
+       * value.h (struct value): Update comment.
+       * valops.c (value_assign): Fold lval_reg_fame_relative into
+       lval_register.
+       * findvar.c (value_from_register, locate_var_value): Ditto.
+
 2004-11-12  Randolph Chung  <tausq@debian.org>
 
        * config/tm/tm-hppa.h (SYMBOLS_CAN_START_WITH_DOLLAR): Remove.
index 64281e12b25e96e0e70741accf6b2304460f22c5..7a38363663ec56a3388e523d2b6374df4476db07 100644 (file)
@@ -630,18 +630,14 @@ enum lval_type
   {
     /* Not an lval. */
     not_lval,
-    /* In memory.  Could be a saved register.  */
+    /* In memory.  */
     lval_memory,
-    /* In a register.  */
+    /* In a register.  Registers are relative to a frame.  */
     lval_register,
     /* In a gdb internal variable.  */
     lval_internalvar,
     /* Part of a gdb internal variable (structure field).  */
-    lval_internalvar_component,
-    /* In a register series in a frame not the current one, which may have been
-       partially saved or saved in different places (otherwise would be
-       lval_register or lval_memory).  */
-    lval_reg_frame_relative
+    lval_internalvar_component
   };
 
 /* Control types for commands */
index c4b85321a41ea2a907b00fc772895b360c6d3b82..487d25eefa5cc6bb42dd827043c2fcd61902c90c 100644 (file)
@@ -634,7 +634,7 @@ value_from_register (struct type *type, int regnum, struct frame_info *frame)
          is that REGISTER_TO_VALUE populates the entire value
          including the location.  */
       REGISTER_TO_VALUE (frame, regnum, type, VALUE_CONTENTS_RAW (v));
-      VALUE_LVAL (v) = lval_reg_frame_relative;
+      VALUE_LVAL (v) = lval_register;
       VALUE_FRAME_ID (v) = get_frame_id (frame);
       VALUE_REGNUM (v) = regnum;
     }
@@ -678,6 +678,9 @@ value_from_register (struct type *type, int regnum, struct frame_info *frame)
            {
              mem_stor++;
              
+             /* FIXME: cagney/2004-11-12: I think this is trying to
+                check that the stored registers are adjacent in
+                memory.  It isn't doing a good job?  */
              mem_tracking = (mem_tracking
                              && (regnum == local_regnum
                                  || addr == last_addr));
@@ -685,33 +688,17 @@ value_from_register (struct type *type, int regnum, struct frame_info *frame)
          last_addr = addr;
        }
       
-      /* FIXME: cagney/2003-06-04: Shouldn't this always use
-         lval_reg_frame_relative?  If it doesn't and the register's
-         location changes (say after a resume) then this value is
-         going to have wrong information.  */
-      if ((reg_stor && mem_stor)
-         || (mem_stor && !mem_tracking))
-       /* Mixed storage; all of the hassle we just went through was
-          for some good purpose.  */
-       {
-         VALUE_LVAL (v) = lval_reg_frame_relative;
-         VALUE_FRAME_ID (v) = get_frame_id (frame);
-         VALUE_REGNUM (v) = regnum;
-       }
-      else if (mem_stor)
+      if (mem_tracking && mem_stor && !reg_stor)
        {
          VALUE_LVAL (v) = lval_memory;
          VALUE_ADDRESS (v) = first_addr;
        }
-      else if (reg_stor)
+      else
        {
          VALUE_LVAL (v) = lval_register;
-         VALUE_ADDRESS (v) = first_addr;
-         VALUE_REGNUM (v) = first_realnum;
+         VALUE_FRAME_ID (v) = get_frame_id (frame);
+         VALUE_REGNUM (v) = regnum;
        }
-      else
-       internal_error (__FILE__, __LINE__,
-                       "value_from_register: Value not stored anywhere!");
       
       VALUE_OPTIMIZED_OUT (v) = optimized;
       
@@ -772,15 +759,6 @@ locate_var_value (struct symbol *var, struct frame_info *frame)
            REGISTER_NAME (VALUE_REGNUM (lazy_value)));
       break;
 
-    case lval_reg_frame_relative:
-      gdb_assert (REGISTER_NAME (VALUE_REGNUM (lazy_value)) != NULL
-                 && *REGISTER_NAME (VALUE_REGNUM (lazy_value)) != '\0');
-      error("Address requested for identifier "
-           "\"%s\" which is in frame register $%s",
-            SYMBOL_PRINT_NAME (var), 
-           REGISTER_NAME (VALUE_REGNUM (lazy_value)));
-      break;
-
     default:
       error ("Can't take address of \"%s\" which isn't an lvalue.",
             SYMBOL_PRINT_NAME (var));
index 6fa1577851975ca8e3d51dc386150b6b3f624cc2..40290d4a721c83e82e3e2ae9677db726402f9e9b 100644 (file)
@@ -596,7 +596,6 @@ value_assign (struct value *toval, struct value *fromval)
       }
       break;
 
-    case lval_reg_frame_relative:
     case lval_register:
       {
        struct frame_info *frame;
@@ -617,7 +616,7 @@ value_assign (struct value *toval, struct value *fromval)
        if (!frame)
          error ("Value being assigned to is no longer active.");
        
-       if (VALUE_LVAL (toval) == lval_reg_frame_relative
+       if (VALUE_LVAL (toval) == lval_register
            && CONVERT_REGISTER_P (VALUE_REGNUM (toval), type))
          {
            /* If TOVAL is a special machine register requiring
@@ -699,7 +698,6 @@ value_assign (struct value *toval, struct value *fromval)
     {
     case lval_memory:
     case lval_register:
-    case lval_reg_frame_relative:
 
       reinit_frame_cache ();
 
index 0feddbf105edd2ba8789cbe832b1e0ea3df7f57c..716f84bf7283518f6de4bfd1e187bb350b4afdf5 100644 (file)
@@ -75,11 +75,8 @@ struct value
      For BITS_BIG_ENDIAN=1 targets, it is the position of the MSB. */
     int bitpos;
 
-  /* Frame value is relative to.  In practice, this ID is only used if
-     the value is stored in several registers in other than the
-     current frame, and these registers have not all been saved at the
-     same place in memory.  This will be described in the lval enum
-     above as "lval_reg_frame_relative".  */
+  /* Frame register value is relative to.  This will be described in
+     the lval enum above as "lval_register".  */
   struct frame_id frame_id;
 
   /* Type of the value.  */