* findvar.c (read_var_value): Apply value_as_pointer() to
authorNicholas Duffek <nsd@redhat.com>
Mon, 16 Jul 2001 22:57:50 +0000 (22:57 +0000)
committerNicholas Duffek <nsd@redhat.com>
Mon, 16 Jul 2001 22:57:50 +0000 (22:57 +0000)
addresses retrieved from the target for LOC_BASEREG and
LOC_BASEREG_ARG variables.

gdb/ChangeLog
gdb/findvar.c

index 79732eae463bb5e653cdae55cbc1a0143f500304..a4277c53d1a3ddb585cec57cf847693fd1012a10 100644 (file)
@@ -1,3 +1,9 @@
+2001-07-16  Nick Duffek  <nsd@redhat.com>
+
+       * findvar.c (read_var_value): Apply value_as_pointer() to
+       addresses retrieved from the target for LOC_BASEREG and
+       LOC_BASEREG_ARG variables.
+
 2001-07-16  Orjan Friberg  <orjanf@axis.com>
 
        * NEWS: New target CRIS.
index 8faf2f18ddaa2f875fe351ce7010b134a220cd82..28a8ce05a993464a53ea91f70839aed620792c83 100644 (file)
@@ -610,22 +610,15 @@ addresses have not been bound by the dynamic loader. Try again when executable i
 
     case LOC_BASEREG:
     case LOC_BASEREG_ARG:
-      {
-       char *buf = (char*) alloca (MAX_REGISTER_RAW_SIZE);
-       get_saved_register (buf, NULL, NULL, frame, SYMBOL_BASEREG (var),
-                           NULL);
-       addr = extract_address (buf, REGISTER_RAW_SIZE (SYMBOL_BASEREG (var)));
-       addr += SYMBOL_VALUE (var);
-       break;
-      }
-
     case LOC_THREAD_LOCAL_STATIC:
       {
-       char *buf = (char*) alloca (MAX_REGISTER_RAW_SIZE);
+       value_ptr regval;
 
-       get_saved_register (buf, NULL, NULL, frame, SYMBOL_BASEREG (var),
-                           NULL);
-       addr = extract_address (buf, REGISTER_RAW_SIZE (SYMBOL_BASEREG (var)));
+       regval = value_from_register (lookup_pointer_type (type),
+                                     SYMBOL_BASEREG (var), frame);
+       if (regval == NULL)
+         error ("Value of base register not available.");
+       addr = value_as_pointer (regval);
        addr += SYMBOL_VALUE (var);
        break;
       }