From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JFUmx-0005lF-V3 for qemu-devel@nongnu.org; Thu, 17 Jan 2008 08:28:12 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JFUmt-0005jF-2U for qemu-devel@nongnu.org; Thu, 17 Jan 2008 08:28:11 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JFUms-0005jA-P9 for qemu-devel@nongnu.org; Thu, 17 Jan 2008 08:28:06 -0500 Received: from kassel160.server4you.de ([62.75.246.160] helo=csgraf.de) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1JFUmp-0007X7-RN for qemu-devel@nongnu.org; Thu, 17 Jan 2008 08:28:06 -0500 Message-ID: <478F2451.4090301@csgraf.de> Date: Thu, 17 Jan 2008 10:48:01 +0100 From: Alexander Graf MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 2/5] Add a PowerPC branch detector References: <478EF8E3.2050503@csgraf.de> <20080117132253.GE9767@networkno.de> In-Reply-To: <20080117132253.GE9767@networkno.de> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Thiemo Seufer Cc: qemu-devel@nongnu.org Thiemo Seufer wrote: > Alexander Graf wrote: > >> PowerPCs have static instruction lengths, so writing an "in-between" brl >> detection is quite simple on this architecture. You are welcome to write >> something like this for any other platform, but if a compile doesn't >> trigger build errors on PowerPC, it shouldn't on other platforms either, >> as PowerPC has quite advanced branch instructions. >> >> This patch is not mandatory, makes debugging a lot easier though. >> > > >> Index: qemu-snapshot-2008-01-15_05/dyngen.c >> =================================================================== >> --- qemu-snapshot-2008-01-15_05.orig/dyngen.c >> +++ qemu-snapshot-2008-01-15_05/dyngen.c >> @@ -1488,6 +1488,16 @@ void gen_code(const char *name, host_ulo >> if (get32((uint32_t *)p) != 0x4e800020) >> error("blr expected at the end of %s", name); >> copy_size = p - p_start; >> + >> +/* blr check for inline returns */ >> + >> + if(strstart(name, "op_", NULL) && !strstart(name, "op_exit", NULL)) { >> + for(p=p_start; p < p_end - 4; p+=4) { >> + if ((get32((uint32_t *)p) & 0xfc00fff0) == 0x4c000020) { >> + error("Inline blr detected in %s. Please append FORCE_RET to the function.", name); >> + } >> + } >> + } >> > > Is check_ops.sh not enough for debugging micro-ops? > > > Basically it should be. PowerPC branching can be (regex) b..rl. Honestly I did not know about this script though and as it was not in the makefile, it did not tell me that something wrong was going on. This check costs near no time and has to be passed in order to build successfully. So either check_ops should be fixed (not only brl) and put into the Makefile.target or a check like this is good to have. Alex