aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/findvar.c43
2 files changed, 30 insertions, 18 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 37a112a..2642687 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
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
indicating these functions are deprecated.
(extract_typed_floating, store_typed_floating): Declare.
diff --git a/gdb/findvar.c b/gdb/findvar.c
index 0ba9392..0445620 100644
--- a/gdb/findvar.c
+++ b/gdb/findvar.c
@@ -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: