From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47554) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a7qMt-0005iR-KE for qemu-devel@nongnu.org; Sat, 12 Dec 2015 15:02:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a7qMs-0003vd-QM for qemu-devel@nongnu.org; Sat, 12 Dec 2015 15:02:11 -0500 References: <1449773244-17078-1-git-send-email-serge.fdrv@gmail.com> <566B5E9E.8040108@twiddle.net> From: Sergey Fedorov Message-ID: <566C7D38.4040609@gmail.com> Date: Sat, 12 Dec 2015 23:02:00 +0300 MIME-Version: 1.0 In-Reply-To: <566B5E9E.8040108@twiddle.net> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] target-*: Get rid of "PC advancement" trick List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Richard Henderson , qemu-devel@nongnu.org Cc: Peter Maydell , Eduardo Habkost , Anthony Green , Alexander Graf , Max Filippov , Michael Walle , qemu-arm@nongnu.org, qemu-ppc@nongnu.org, Paolo Bonzini , "Edgar E. Iglesias" , Guan Xuetao , Leon Alrae , Aurelien Jarno , Jia Liu On 12/12/15 02:39, Richard Henderson wrote: > On 12/10/2015 10:47 AM, Sergey Fedorov wrote: >> The "PC advancement" trick was used just after recognizing that a >> breakpoint exception was going to be generated. This trick has had two >> points: >> 1. Guarantee that tb->size isn't zero: there are many places where >> it's >> expected to be non-zero. In fact, that is even stated in the >> comment >> for this field. >> 2. Try to satisfy disassembler's check for instruction length. To this >> end, PC advancement was done for estimated instruction length, but >> actually, didn't work properly in variable-instruction-length >> cases. >> >> Substitute this trick with checking for TB size at the end of >> translation. If we get an empty TB then just set tb->size to 1 and skip >> disassembling. Setting tb->size to 1 is enough to get correct behaviour, >> whereas an empty TB doesn't obviously need to be disassembled. > > This doesn't help when the TB already has instructions, the TB would > ordinarily cross a page boundary, and the breakpoint is at the page > boundary. I see your point. But I am wondering why most architectures stop translating on a page boundary whereas i386 and m86k don't. There are some comments which say that's to ensure instruction fetch aborts occur at the right place. Isn't it necessary for all architectures? At least for those architectures which do stop translating on a page boundary, I think this patch is applicable. Certainly, it would be better to have a single solution for all architectures. Thanks, Sergey