Message ID | 4F883DE3.2050501@mc.net |
---|---|
State | New |
Headers | show |
> >>>>> Paolo, wasn't there a compiler option that works around the problem? > >>>>> > >>>> I asked to test it (-D_MT) but never got any answer. > >>> > >>> I'd be surprised if defining _MT helped against compiler bugs. > >> > >> Well, -mthreads fixed it, and it should be the same as -D_MT > >> -lmingwthrd. But we shouldn't need libmingwthrd, or do we? > > > > I've tried to add -mthreads to compiler options but nothing has changed, qemu still fails. > > This is likely a different bug than the original thread related bug. > I'm using the mingw gcc 4.6.2, and I see the same thing as shown here: > http://virtuallyfun.superglobalmegacorp.com/?p=1846 > > Something goes wrong during optimization with gcc 4.6.2, but it doesn't appear to be TLS > related. Digging into it a bit, > qemu_coroutine_switch() seems to break if it gets inlined. Can anyone else confirm if this > one-line patch works for them? > > diff --git a/coroutine-win32.c b/coroutine-win32.c index 4179609..504873b 100644 > --- a/coroutine-win32.c > +++ b/coroutine-win32.c > @@ -36,6 +36,7 @@ typedef struct > static __thread CoroutineWin32 leader; > static __thread Coroutine *current; > > +__attribute__ ((noinline)) > CoroutineAction qemu_coroutine_switch(Coroutine *from_, Coroutine *to_, > CoroutineAction action) { I applied your patch to qemu 1.0 and it stopped crashing. By the way, I also created implementation of coroutine-win32.c, which uses WinAPI TLS functions directly (without using __thread specifiers). It works fine too. Pavel Dovgaluk
2012/4/16 Pavel Dovgaluk <Pavel.Dovgaluk@ispras.ru>: > >[snipped] > > By the way, I also created implementation of coroutine-win32.c, which > uses WinAPI TLS functions directly (without using __thread specifiers). > It works fine too. > Patch is welcome. :D > > Pavel Dovgaluk > >
Il 16/04/2012 08:24, Pavel Dovgaluk ha scritto: > By the way, I also created implementation of coroutine-win32.c, which > uses WinAPI TLS functions directly (without using __thread specifiers). > It works fine too. Cool, can you submit it? Paolo
> Il 16/04/2012 08:24, Pavel Dovgaluk ha scritto: > > By the way, I also created implementation of coroutine-win32.c, > > which uses WinAPI TLS functions directly (without using __thread specifiers). > > It works fine too. > > Cool, can you submit it? I submitted the patch in a separate message. Pavel Dovgaluk
diff --git a/coroutine-win32.c b/coroutine-win32.c index 4179609..504873b 100644 --- a/coroutine-win32.c +++ b/coroutine-win32.c @@ -36,6 +36,7 @@ typedef struct static __thread CoroutineWin32 leader; static __thread Coroutine *current; +__attribute__ ((noinline)) CoroutineAction qemu_coroutine_switch(Coroutine *from_, Coroutine *to_, CoroutineAction action) {