* findvar.c (read_var_value): For LOC_INDIRECT and LOC_REF_ARG
authorAndrew Cagney <cagney@redhat.com>
Mon, 24 Sep 2001 19:46:15 +0000 (19:46 +0000)
committerAndrew Cagney <cagney@redhat.com>
Mon, 24 Sep 2001 19:46:15 +0000 (19:46 +0000)
convert the pointer into a CORE_ADDRs.

gdb/ChangeLog
gdb/findvar.c

index 37a112aeef0bd0acd6a8fb6a58106ba7468e5db9..2642687b3eb5536732af66308bd8a7df2b4303f6 100644 (file)
@@ -1,3 +1,8 @@
+2001-09-24  Andrew Cagney  <ac131313@redhat.com>
+
+       * findvar.c (read_var_value): For LOC_INDIRECT and LOC_REF_ARG
+       convert the pointer into a CORE_ADDRs.
+
 2001-09-24  Andrew Cagney  <ac131313@redhat.com>
 
        * doublest.h (store_floating, extract_floating): Add comment
index 0ba939284a1d95f68fa72282c72f1a467b61553a..04456207c7d45220636caf946165b78bae4e9d87 100644 (file)
@@ -471,18 +471,21 @@ read_var_value (register struct symbol *var, struct frame_info *frame)
       break;
 
     case LOC_INDIRECT:
-      /* The import slot does not have a real address in it from the
-         dynamic loader (dld.sl on HP-UX), if the target hasn't begun
-         execution yet, so check for that. */
-      if (!target_has_execution)
-       error ("\
+      {
+       /* The import slot does not have a real address in it from the
+          dynamic loader (dld.sl on HP-UX), if the target hasn't
+          begun execution yet, so check for that. */
+       CORE_ADDR locaddr;
+       struct value *loc;
+       if (!target_has_execution)
+         error ("\
 Attempt to access variable defined in different shared object or load module when\n\
 addresses have not been bound by the dynamic loader. Try again when executable is running.");
 
-      addr = SYMBOL_VALUE_ADDRESS (var);
-      addr = read_memory_unsigned_integer
-       (addr, TARGET_PTR_BIT / TARGET_CHAR_BIT);
-      break;
+       locaddr = SYMBOL_VALUE_ADDRESS (var);
+       loc = value_at (lookup_pointer_type (type), locaddr, NULL);
+       addr = value_as_pointer (loc);
+      }
 
     case LOC_ARG:
       if (frame == NULL)
@@ -494,15 +497,19 @@ addresses have not been bound by the dynamic loader. Try again when executable i
       break;
 
     case LOC_REF_ARG:
-      if (frame == NULL)
-       return 0;
-      addr = FRAME_ARGS_ADDRESS (frame);
-      if (!addr)
-       return 0;
-      addr += SYMBOL_VALUE (var);
-      addr = read_memory_unsigned_integer
-       (addr, TARGET_PTR_BIT / TARGET_CHAR_BIT);
-      break;
+      {
+       struct value *ref;
+       CORE_ADDR argref;
+       if (frame == NULL)
+         return 0;
+       argref = FRAME_ARGS_ADDRESS (frame);
+       if (!argref)
+         return 0;
+       argref += SYMBOL_VALUE (var);
+       ref = value_at (lookup_pointer_type (type), argref, NULL);
+       addr = value_as_pointer (ref);
+       break;
+      }
 
     case LOC_LOCAL:
     case LOC_LOCAL_ARG: