[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