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

Amitay Isaacs amitay at ozlabs.org
Wed Oct 9 13:40:20 AEDT 2019


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.)

> 
> 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.

> 
> - 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.
-- 

Kinkler's Second Law: All the easy problems have been solved.



More information about the Pdbg mailing list