* findvar.c (read_var_value): Don't allocate V when it will not
authorDaniel Jacobowitz <drow@false.org>
Mon, 7 Mar 2005 22:38:04 +0000 (22:38 +0000)
committerDaniel Jacobowitz <drow@false.org>
Mon, 7 Mar 2005 22:38:04 +0000 (22:38 +0000)
be used.  Add missing break for LOC_INDIRECT.

gdb/ChangeLog
gdb/findvar.c

index 544089721219e87a5c9114f6f10cac2101feb618..70415c020275ddcdd338f47cadb13f400ca06cc5 100644 (file)
@@ -1,3 +1,8 @@
+2005-03-07  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * findvar.c (read_var_value): Don't allocate V when it will not
+       be used.  Add missing break for LOC_INDIRECT.
+
 2005-03-06  Mark Kettenis  <kettenis@gnu.org>
 
        * sparc64fbsd-tdep.c: Include "solib-svr4.h".
index 84964f31a22b95c327f328a75c756649b66ed621..8c48c934d40568209e0fb489f90a0495050e87b1 100644 (file)
@@ -385,12 +385,20 @@ read_var_value (struct symbol *var, struct frame_info *frame)
   CORE_ADDR addr;
   int len;
 
-  v = allocate_value (type);
-  VALUE_LVAL (v) = lval_memory;        /* The most likely possibility.  */
+  if (SYMBOL_CLASS (var) == LOC_COMPUTED
+      || SYMBOL_CLASS (var) == LOC_COMPUTED_ARG
+      || SYMBOL_CLASS (var) == LOC_REGISTER
+      || SYMBOL_CLASS (var) == LOC_REGPARM)
+    /* These cases do not use V.  */
+    v = NULL;
+  else
+    {
+      v = allocate_value (type);
+      VALUE_LVAL (v) = lval_memory;    /* The most likely possibility.  */
+    }
 
   len = TYPE_LENGTH (type);
 
-
   /* FIXME drow/2003-09-06: this call to the selected frame should be
      pushed upwards to the callers.  */
   if (frame == NULL)
@@ -452,6 +460,7 @@ addresses have not been bound by the dynamic loader. Try again when executable i
        locaddr = SYMBOL_VALUE_ADDRESS (var);
        loc = value_at (lookup_pointer_type (type), locaddr);
        addr = value_as_address (loc);
+       break;
       }
 
     case LOC_ARG: