tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: _lwp_setprivate and _lwp_makecontext



On Fri, Jul 30, 2010 at 02:28:47AM +0000, YAMAMOTO Takashi wrote:
> > Hi all,
> > I'm working on Thread Locale Storage support for NetBSD and I am facing
> > an interesting issue with the libpthread integration. On i386 and AMD64,
> > TLS support uses the segment register %gs or %fs to load the thread
> > pointer. The location used as segment base is thread specific and stored
> > in the PCB. It is not part of ucontext_t and therefore _lwp_makecontext
> > can't store private in it. To work around this, I can think of three
> > options:
> > 
> > (1) Break ucontext_t and allow the private pointer as separate field
> > 
> > Pro: Integrates nicely with the other platforms and debugger
> > Contra: Lots of nasty interfaces to deal with in terms of compat.
> > 
> > (2) Add private as argument for _lwp_create as well.
> > 
> > Pro: logically fits well too, minimal amount of changes for libc and
> > libpthread.
> > 
> > (3) Defer calling _lwp_setprivate into the newly created thread.
> > 
> > Pro: no kernel / libc changes needed
> > Contra: might create complications with signal handlers etc
> > 
> > 
> > I'm personally favoring (2), but looking for input.
> > 
> > Joerg
> 
> when i looked at this, i abused _REG_ESP for i386.
> http://mail-index.netbsd.org/tech-kern/2009/09/27/msg006146.html
> i have no idea if other ports have unused members like this, tho.

I don't think that is going to work for this. The stack pointer is
needed for the stack location of the newly created thread, isn't it?

Joerg


Home | Main Index | Thread Index | Old Index