summaryrefslogtreecommitdiff
path: root/gdb/findvar.c
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2001-09-24 19:46:15 +0000
committerAndrew Cagney <cagney@redhat.com>2001-09-24 19:46:15 +0000
commit0692c8e08396f4ea557defcf8e3f55065494b4bc (patch)
tree0214e506ca82382b4da5200044b5669641556c12 /gdb/findvar.c
parente8e46f78df722854f4da3922d1529aacd387a231 (diff)
downloadgdb-0692c8e08396f4ea557defcf8e3f55065494b4bc.tar.gz
* findvar.c (read_var_value): For LOC_INDIRECT and LOC_REF_ARG
convert the pointer into a CORE_ADDRs.
Diffstat (limited to 'gdb/findvar.c')
-rw-r--r--gdb/findvar.c43
1 files changed, 25 insertions, 18 deletions
diff --git a/gdb/findvar.c b/gdb/findvar.c
index 0ba939284a1..04456207c7d 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: