qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] Fiber switching and stack protection


From: Pavel Dovgaluk
Subject: Re: [Qemu-devel] Fiber switching and stack protection
Date: Mon, 16 Apr 2012 10:24:17 +0400

> >>>>> 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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]