From f76febae84836e027f5638da63871a9d136da166 Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Mon, 24 Sep 2001 19:46:15 +0000 Subject: [PATCH] * findvar.c (read_var_value): For LOC_INDIRECT and LOC_REF_ARG convert the pointer into a CORE_ADDRs. --- gdb/ChangeLog | 5 +++++ gdb/findvar.c | 43 +++++++++++++++++++++++++------------------ 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 37a112aeef0..2642687b3eb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2001-09-24 Andrew Cagney + + * findvar.c (read_var_value): For LOC_INDIRECT and LOC_REF_ARG + convert the pointer into a CORE_ADDRs. + 2001-09-24 Andrew Cagney * doublest.h (store_floating, extract_floating): Add comment 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: -- 2.30.2