* findvar.c (read_var_value): For LOC_INDIRECT and LOC_REF_ARG

convert the pointer into a CORE_ADDRs.
This commit is contained in:
Andrew Cagney 2001-09-24 19:46:15 +00:00
parent c406afafb1
commit f76febae84
2 changed files with 30 additions and 18 deletions

View 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

View 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: