X-Authentication-Warning: delorie.com: mailnull set sender to djgpp-bounces using -f From: Charles Sandmann Newsgroups: comp.os.msdos.djgpp Subject: Re: DS and ESP Date: Tue, 19 Feb 2002 12:58:45 CST Organization: Rice University, Houston TX Lines: 22 Message-ID: <3c72a065.sandmann@clio.rice.edu> References: <3c727c49 DOT sandmann AT clio DOT rice DOT edu> <3C729854 DOT 7EBE42E4 AT yahoo DOT com> NNTP-Posting-Host: clio.rice.edu X-Trace: joe.rice.edu 1014145694 8205 128.42.105.3 (19 Feb 2002 19:08:14 GMT) X-Complaints-To: abuse AT rice DOT edu NNTP-Posting-Date: 19 Feb 2002 19:08:14 GMT X-NewsEditor: ED-1.5.9 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com > > If the DPMI provider is done correctly either hardware interrupts or > > even page faults work fine even when the user ESP is invalid. All of > > these should be handled on the locked 4Kb DPMI internal stack and > > never touch the user stack. So, it turns out that code isn't broken :-) > > Doesn't the interrupt itself to the stack switching code have to > store a return address on the user stack? and maybe the flags > too. Or is that all in the hardware? The hardware has a built in feature to swap stacks on a change of ring (priv). In the case of a hardware interrupt or exception we change execution to ring 0 (instead of ring 3) which also swaps to an internal ring 0 stack. All values are set on that stack (or one which it also may swap to). The appropriate "return" will restore the ring 3 stack as being current. This is required for stable operation - what would happen if you need to expand the stack downward (crossing a page boundary) in the middle of a page fault? Or an exception? This is one of the problems with any "ring 0" DPMI provider - that there is no way to protect against these type of double faults - so you must do something special to catch them in which case they are not recoverable.