Ulrich Weigand wrote:
> I've been looking at your latest (tarfile) version, and IMO we should
> try to get this into CVS as soon as possible. Having a CVS that lags
> behind current development (in significant ways) is not very useful ;-)
Agreed. Though I might suggest starting with the next version
which will have extra framework. There are many changes.
> I've cleaned up your version a bit (removing now obsolete cruft like
> the RET_BECAUSE_ handling), but I'd prefer to have the new version
> support at least the same major functionality as the current CVS
> before replacing it. The only thing missing in that respect is the
> hardware interrupt handling, AFAICS (and the debugger features to
> intercept/reflect interrupts).
>
> Did you implement interrupt handling in the meantime? Otherwise, I'd
> add this and put the new version into CVS ..
Your are right, I temporarily don't support that. Mostly
because I was focusing on only the cooperative guest.
That tarball was mostly a proof of concept. I will
add this back in soon. Debugger features are not quite so
important and sometimes get in the way of architecting
plex86 until code stabilizes.
> B.t.w. I noticed one point the seems a little odd: when performing
> SBE, you keep the original PTE stored in a global variable and restore
> it on return to the monitor. IMO this isn't necessary: as soon as
> you have placed a TLB entry pointing to the virtualized page into the
> I TLB, you can immediately replace the original PTE, only with the U/S
> bit toggled off. That way, guest access to the page would still trap,
> and the monitor is able to access the (original) page without needing
> to restore anything. The advantage is that you don't need a global
> variable to store anything, which simplifies the use of more than one
> virtualized page at the same time.
This is a good observation. I'm going to change this PTE handling,
so I didn't spend any time optimizing it.
> I've attached a correspondingly modified version of sbe(), which appears
> to be working fine. Let me know if I've overlooked anything ...
>
> (Another minor point: when using %dl explicitly in a gcc inline assembly
> statement, it is not enough to mark edx as clobbered, you need to use
> an *early clobber* modifier, otherwise gcc feels free to use edx for an
> input parameter :-/ This I found out the hard way ;-) )
OK, I'll look at this soon and carry it over to my internal code
for the next release.
I'll try to make a new release sooner than later, so we can
sync() the CVS tree.
Thanks,
-Kevin