[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:58:27 AEDT 2019
On Wed, 2019-10-09 at 13:53 +1100, Alistair Popple wrote:
> 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?
Well the motivation behind target_to_real() and target_to_virtual() is
adding convinience functions that help improve the readability of the
traverse code where they are used. As I described they are not
strictly converting to real/virtual targets, but if possible map it to
the right target.
I can add some comments for these functions if that would help.
>
> > > 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.
I have added assertions where we expect a virtual target.
>
> - 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.
> >
>
>
>
Amitay.
--
Problems are opportunities in work clothes. - Henry Kaiser
More information about the Pdbg
mailing list