Re: KSE and qt-mt

From: Daniel Eischen <eischen_at_vigrid.com>
Date: Mon, 22 Dec 2003 14:53:59 -0500 (EST)
On Mon, 22 Dec 2003, Julian Elischer wrote:
> 
> On Mon, 22 Dec 2003, Daniel Eischen wrote:
> 
> > On Mon, 22 Dec 2003, Julian Elischer wrote:
> > > 
> > > On Mon, 22 Dec 2003, Daniel Eischen wrote:
> > > 
> > > > On Mon, 22 Dec 2003, Vladimir B. Grebenschikov wrote:
> > > > 
> > > > > If libc_r mapped into libkse, like /etc/libmap.conf:
> > > > > --
> > > > > libc_r.so.5  libkse.so.1
> > > > > libc_r.so    libkse.so
> > > > > --
> > > > > 
> > > > > Build of port avifile-0.7.38_1,2 coredumps while configure detects qt
> > > > > library. With regular libc_r it builds as exprected.
> > > > 
> > > > > # pkg_which  /usr/X11R6/lib/libGL.so.1
> > > > > XFree86-libraries-4.3.0_6 nvidia-driver-1.0.4365_1
> > > > 
> > > > This is known problem; you can't use nvidia drivers with libthr
> > > > or libkse.  Nvidia will have to rebuild their drivers/openGL
> > > > library to not use static ldt allocation.
> > > 
> > > Actually they need to not allocate any LDTs but use the ones we have..
> > 
> > That's only when we support __thread properly.  For FreeBSD, they currently
> > assume that we don't and have some sort of hack to fudge up some LDTs.
> > So it is easy enough for them to just use dynamic LDT allocation
> > as a work around until __thread is fully supported.
> > 
> > > unfortunatly, for that to work we need to leave 10 or so words free for
> > > now at (%gs) as they do their own __thread implementation
> > > but we could do that for now without too much pain..
> > 
> > They only want to build one driver/openGL library for both
> > -current and -stable.  I told them to use getosreldate()
> > or just handle an invalid return when trying to use
> > i386_set_ldt(LDT_AUTO_ALLOC, ...).
> 
> I don't think that would work.. both we and they would be allocating
> LDTs.. which one would be loaded?

I also asked them to use %fs; I'm not sure if they will...

> if tey just left the LDT alone they could use ours as long as we left
> room for them to do so..
> they said they only need a few entries at the head..
> Alternatively thay can compile using __thread when we support it..

I don't want to add hacks for particular applications, especially
when we're now mostly conformant with the TLS spec.  Our %gs is
is per-KSE, not per-thread, so leaving spares at the beginning
of it probably wouldn't have the correct behavior.

Our current (libkse i386) %gs usage is:

/*
 * %gs points to a struct kcb.
 */
struct kcb {
	struct tcb		*kcb_curtcb;
	struct kcb		*kcb_self;	/* self reference */
	int			kcb_ldt;
	struct kse		*kcb_kse;
	struct kse_mailbox	kcb_kmbx;
};

struct tcb {
	struct tdv		*tcb_tdv;
	struct pthread		*tcb_thread;
	void			*tcb_addr;	/* allocated tcb address */
	void			*tcb_spare;	/* align tcb_tmbx to 16 bytes */
	struct kse_thr_mailbox	tcb_tmbx;
};

The dynamic thread vector (tcb_tdv) is supposed to point to
the dynamic TLS but we don't currently allocate it.

-- 
Dan Eischen
Received on Mon Dec 22 2003 - 10:54:11 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:35 UTC