On 26 October 2011 15:39, Paolo Bonzini <pbonz...@redhat.com> wrote: > On 10/26/2011 04:03 PM, Peter Maydell wrote: >> >> For the record (since I think we only talked about this on IRC): >> * the POSIX TLS fallback code doesn't work on Linux hosts for >> linux-user emulation (the constructor is never called to set up >> the TLS for the main thread, probably something to do with our >> custom linker script, since it does work OK for system emulation) >> * if I recall correctly from IRC it doesn't compile on OpenBSD >> >> so for 1.0 perhaps we need to fall back to a simpler set of patches >> that just avoid the regression in thread support for linux-user ? > > I agree.
I was thinking something like a trivial qemu-tls.h which does #ifdef __linux__ #define DECLARE_TLS(type, x) extern DEFINE_TLS(type, x) #define DEFINE_TLS(type, x) __thread __typeof__(type) tls__##x #define get_tls(x) tls__##x #else /* Dummy implementations -- we can get away with this because system * mode is effectively single-threaded for our current limited use of * TLS, and the only -user mode which supports multiple threads is * linux-user. * TODO: proper implementations via Win32 .tls sections and * POSIX pthread_getspecific. */ #define DECLARE_TLS(type, x) extern DEFINE_TLS(type, x) #define DEFINE_TLS(type, x) __typeof__(type) tls__##x #define get_tls(x) tls__##x #endif and then we can just use your "Make cpu_single_env thread-local" patch as-is: http://git.linaro.org/gitweb?p=people/pmaydell/qemu-arm.git;a=commitdiff;h=b674559fc8a67ae7d30fe3ab3062d5855ac77d2d (for that matter we could apply the "Prepare Windows port for thread-local cpu_single_env" patch too, but that's not a requirement.) -- PMM