[Pdbg] [PATCH v4 09/30] libpdbg: Add a function to map real target to virtual

Alistair Popple alistair at popple.id.au
Wed Oct 9 13:53:36 AEDT 2019


On Wednesday, 9 October 2019 1:40:20 PM AEDT Amitay Isaacs wrote:
> On Wed, 2019-10-09 at 13:33 +1100, Alistair Popple wrote:
> > Just a quick question. Can we assume:
> > 
> > target_is_virtual(target_to_virtual(target)) will always be true?
> 
> No. That's not strictly correct.  target_to_virtual() will only map to
> virtual targets, if there is a linked virtual target.  Otherwise it
> will return the same target, as there is nothing to map.
> 
> 
> > And that:
> > 
> > target_is_virtual(target_to_real(target)) will always be false?
> 
> Similar argument as above.  Some virtual nodes may not have any linked
> real nodes.  In that case, target_to_real() will return the same
> virtual target. (For example, "/proc0" is a virtual target without any
> real target linked to it.)
> 

So in these cases are we asserting that if we fail to map a node to a 
[virtual|real] node that it is still correct to continue on treating the 
original node as if it were of the requested type?

> > Do you think it be would be worthwhile adding some asserts to check
> > this or 
> > does the probing code (which I'm yet to read) somehow guarantee
> > those 
> > assertions are always correct?
> 
> I think the tests which focus on the traverse will ensure the
> correctness of map functions.  We don't specifically need testing for
> the lower level functions.  Also, these functions are internal to
> libpdbg and I would have to jump through hoops to test them. :-)  But
> not impossible to add tests if you strongly feel about it.

It wasn't so much for testing but rather to ensure we crash and burn as early 
as possible if something unexpected (ie. buggy) is observed. However it seems 
my original assertions were wrong anyway.

- Alistair

> > 
> > - Alistair
> > 
> > On Thursday, 3 October 2019 2:18:48 PM AEDT Amitay Isaacs wrote:
> > > Signed-off-by: Amitay Isaacs <amitay at ozlabs.org>
> > > ---
> > >  libpdbg/target.c | 8 ++++++++
> > >  libpdbg/target.h | 1 +
> > >  2 files changed, 9 insertions(+)
> > > 
> > > diff --git a/libpdbg/target.c b/libpdbg/target.c
> > > index 20f292f..f3d4db8 100644
> > > --- a/libpdbg/target.c
> > > +++ b/libpdbg/target.c
> > > @@ -481,3 +481,11 @@ struct pdbg_target *target_to_real(struct
> > > pdbg_target 
> > *target)
> > >  
> > >  	return target;
> > >  }
> > > +
> > > +struct pdbg_target *target_to_virtual(struct pdbg_target *target)
> > > +{
> > > +	if (target->compatible && target->vnode)
> > > +		return target->vnode;
> > > +
> > > +	return target;
> > > +}
> > > diff --git a/libpdbg/target.h b/libpdbg/target.h
> > > index 5d04117..8148f83 100644
> > > --- a/libpdbg/target.h
> > > +++ b/libpdbg/target.h
> > > @@ -66,5 +66,6 @@ const char *pdbg_get_backend_option(void);
> > >  struct sbefifo *pib_to_sbefifo(struct pdbg_target *target);
> > >  bool target_is_virtual(struct pdbg_target *target);
> > >  struct pdbg_target *target_to_real(struct pdbg_target *target);
> > > +struct pdbg_target *target_to_virtual(struct pdbg_target *target);
> > >  
> > >  #endif
> > > 
> > 
> > 
> > 
> 
> Amitay.
> 






More information about the Pdbg mailing list