From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57234) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VaNps-0006Sp-Hf for qemu-devel@nongnu.org; Sun, 27 Oct 2013 06:44:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VaNpk-0007h3-4S for qemu-devel@nongnu.org; Sun, 27 Oct 2013 06:44:44 -0400 Received: from [2a03:4000:1::4e2f:c7ac:d] (port=40801 helo=v220110690675601.yourvserver.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VaNpj-0007gz-Pu for qemu-devel@nongnu.org; Sun, 27 Oct 2013 06:44:36 -0400 Message-ID: <526CEE86.1020000@weilnetz.de> Date: Sun, 27 Oct 2013 11:44:22 +0100 From: Stefan Weil MIME-Version: 1.0 References: <20131023073949.GA4527@bom.nom.co> <52679025.3000106@redhat.com> <526830E6.6070904@weilnetz.de> <5268F8B4.7030105@redhat.com> <52694CC1.6040301@weilnetz.de> <5269958A.50400@redhat.com> <526B908B.20104@weilnetz.de> <526CB88D.6030209@redhat.com> In-Reply-To: <526CB88D.6030209@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] qemu 1.6.1 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: "Michael W. Bombardieri" , qemu-devel@nongnu.org, Stefan Hajnoczi Am 27.10.2013 07:54, schrieb Paolo Bonzini: > Here is the code with annotations > > broken works > ------------------------------------------------------------------------- > push %ebx > sub $0x18,%esp sub $0x1c,%esp > mov %ebx,0x14(%esp) > mov %esi,0x18(%esp) > > movl $0x6d62a8,(%esp) movl $0x6d62a8,(%esp) > mov 0x24(%esp),%ebx mov 0x24(%esp),%ebx ebx = to; > call ___emutls_get_address call ___emutls_get_address eax = ¤t; > > mov (%eax),%esi esi = current; > > mov %ebx,(%eax) mov %ebx,(%eax) current = to; > > mov 0x28(%esp),%eax mov 0x28(%esp),%eax eax = action > mov %eax,0x24(%ebx) mov %eax,0x24(%ebx) to->action = action > mov 0x20(%ebx),%eax mov 0x20(%ebx),%eax eax = to->fiber > mov %eax,(%esp) mov %eax,(%esp) "push" to->fiber > call *0x835fc0 call *0x835fc0 SwitchToFiber(to->fiber) > sub $0x4,%esp sub $0x4,%esp undo PASCAL calling convention > > ** mov 0x20(%esp),%eax eax = from > mov 0x24(%eax),%eax mov 0x24(%esi),%eax eax = from->action > > mov 0x14(%esp),%ebx > mov 0x18(%esp),%esi > add $0x18,%esp add $0x1c,%esp > pop %ebx > ret ret > > > I think the problem is that 0x20(%esp) gets somehow corrupted at the > instruction I highlighted with **. > > The simplest fix then would be to add a barrier() before and after > SwitchToFiber. > > Paolo I tried adding two barrier() statements around SwitchToFiber(). That change did not result in different assembler code (=> unchanged behaviour, QEMU still raises an assertion). Stefan