On Sunday 23 July 2006 11:18, Divacky Roman wrote: > On Sat, Jul 22, 2006 at 07:15:35PM -0400, Daniel Eischen wrote: > > I think it is because WINE stomps on or TLS. Nothing we can > > do about that except patch wine so it doesn't. Look at the > > console messages for: > > > > Warning: pid XXX used static ldt allocation
Wine's LDT code could probably be improved to bring in LDT_AUTO_ALLOC and/or use the GDT entry for %fs through i386_set_fsbase() for TLS instead of allocating an LDT entry (per thread). But, I don't think this is currently a problem. As far as I can see FreeBSD's TLS support doesn't use the LDT (anymore) so wine's static ldt allocation can't possibly interfere with it. > I dont know details but judging from what linux does I think it might > be that wine requires more then one GDT entry for TLS areas. at least > comment in linux sources suggests so. > > linux has 3 GDT entries for TLS while fbsd just 1. Wine on FreeBSD doesn't use the GDT (yet?). It allocates LDT entries for TLS which should work just as well. In any case, FreeBSD and Linux don't differ that much in this. FreeBSD has 2 GDT entries available, one for %gs which is used by the threading libs (following http://people.redhat.com/drepper/tls.pdf I suppose) and one for %fs which is used by win32 code so wine could use this instead of the LDT way. The related (undocumented) libc functions are i386_get_fsbase, i386_set_fsbase, i386_get_gsbase and i386_set_gsbase. Linux reserves 3 GDT entries, that can be manipulated through one syscall (set_thread_area) and then it's up to the user to point %fs or %gs (or some other selector?) to one of these entries.
pgpGNTlDMyfSU.pgp
Description: PGP signature