On Wed, Dec 08, 1999 at 12:53:51AM -0500, Luoqi Chen wrote:
> > I have the next question.
> > The FreeBSD on i386 don't use GS register, even kernel DDB don't show
> > it. And at the time when kernel loaded and operational GS didn't 
> > initialized yet and have some garbage value (something like 0x1f, i.e.
> > pointed to the LDT). But because no one don't touch that all working fine.
> > 
> 0x1f is not garbage, it's (FreeBSD) standard user data segment.
Small mistake not 0x1f, but 0x2f, at any case it doesn't mean.
About standard registers, I think you are mean user space?
I wrote simple kld, and obtain the next results:
ldt = 0x0028 gs = 0x0000002f, ds = 0x00000010 

And also others selectors such as fs, cs, ss and es pointed to GTD. Only gs
has a different case (doesn't change its value when a context switched).

> > Question.
> > The some driver had code like this:
> >     push    %gs <--- OK 0x1f  saved on the stack
> >     ...  
> >     call    do_big_deal
> >     ...
> >     pop     %gs <--- Restore 0x1f and have a fault, probably Double Fault
> > 
> It could only be that the driver code changed the LDT descriptor and didn't
> restore it upon return.
Oh, Exactly, you are right. Thanks!
That code clear ldt, other selectors restored ok, but not gs.  Before I think, 
that in the kernel ldt has a null value, and never tried to test it. 

-- 
Vladimir Silyaev


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to