From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Snyder To: Andrew Cagney Cc: gdb-patches@sources.redhat.com Subject: Re: [rfc] more findvar harvard fixes Date: Mon, 24 Sep 2001 11:22:00 -0000 Message-id: <3BAF79C1.4265D840@cygnus.com> References: <3BACFE82.7020104@cygnus.com> X-SW-Source: 2001-09/msg00316.html 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 > > * 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: