[rfc] more findvar harvard fixes
Michael Snyder
msnyder@cygnus.com
Mon Sep 24 11:22:00 GMT 2001
Andrew Cagney wrote:
>
> Hello,
>
> The attached patch follows through a few harvard architecture problems
> Nick Duffek and Jim Blandy worked though in the recent thread:
>
> http://sources.redhat.com/ml/gdb-patches/2001-07/msg00382.html
>
> Given I think I'm just finishing these changes, I think this is pretty
> obvious so I'll check it in in a few days.
>
> Look ok to people.
>
> Andrew
Looks reasonably sane to me. ;-)
>
> ----------------------------------------------------------------------------------------------------
> 2001-09-22 Andrew Cagney <ac131313@redhat.com>
>
> * findvar.c (read_var_value): For LOC_INDIRECT and LOC_REF_ARG
> convert the pointer into a CORE_ADDRs.
>
> Index: findvar.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/findvar.c,v
> retrieving revision 1.22
> diff -p -r1.22 findvar.c
> *** findvar.c 2001/08/01 18:39:23 1.22
> --- findvar.c 2001/09/22 21:00:33
> *************** read_var_value (register struct symbol *
> *** 471,488 ****
> 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 ("\
> 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;
>
> case LOC_ARG:
> if (frame == NULL)
> --- 471,491 ----
> 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. */
> ! 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.");
>
> ! 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)
> *************** addresses have not been bound by the dyn
> *** 494,508 ****
> 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;
>
> case LOC_LOCAL:
> case LOC_LOCAL_ARG:
> --- 497,515 ----
> break;
>
> case LOC_REF_ARG:
> ! {
> ! 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:
More information about the Gdb-patches
mailing list