From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LpRUe-0007vv-Kc for qemu-devel@nongnu.org; Thu, 02 Apr 2009 14:18:24 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LpRUY-0007su-Vu for qemu-devel@nongnu.org; Thu, 02 Apr 2009 14:18:23 -0400 Received: from [199.232.76.173] (port=50040 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LpRUY-0007sr-SX for qemu-devel@nongnu.org; Thu, 02 Apr 2009 14:18:18 -0400 Received: from mail-fx0-f169.google.com ([209.85.220.169]:57004) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LpRUY-0003wD-0a for qemu-devel@nongnu.org; Thu, 02 Apr 2009 14:18:18 -0400 Received: by fxm17 with SMTP id 17so589031fxm.34 for ; Thu, 02 Apr 2009 11:18:11 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: Date: Thu, 2 Apr 2009 21:18:11 +0300 Message-ID: Subject: Re: [Qemu-devel] [6967] Temporary workaround for ppc on ppc From: Blue Swirl Content-Type: text/plain; charset=UTF-8 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: qemu-devel@nongnu.org On 4/2/09, malc wrote: > On Thu, 2 Apr 2009, Blue Swirl wrote: > > > On 4/2/09, malc wrote: > > > Revision: 6967 > > > http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6967 > > > Author: malc > > > Date: 2009-04-02 01:16:39 +0000 (Thu, 02 Apr 2009) > > > Log Message: > > > ----------- > > > Temporary workaround for ppc on ppc > > > > > > target-ppc/translate.c puts values of type opcode_t into .opcodes > > > section, using GCC extension to do so, and hoping that this will make > > > them appear contiguously and in the source order in the resulting > > > executable. This assumption is not safe and is known to be violated > > > with certain versions of GCC, certain flags passed to it and on > > > certain platforms (gcc 4.3.0, -O and PPC/PPC64 for instance) > > > > I've always wondered if the section hack was a very clever one or too > > clever one, this makes it clear. > > > > The section uses could be removed by moving the opcode tables towards > > > There are _no_ opcode tables that's why it fails. The code just does > > opcode_t in_section(.opcodes) start; > ; > opcode_t in_section(.opcodes) end; > > And then scans from &start to &end. > > The only way, that i know of, to make that work is to indeed put > things into a table (an array). Yes, that's what I meant. The alternative is to move the opcodes to a new file, which is included two times by translate.c, first to get the opcode function definitions and second time to construct the table. This is what I meant with the #include trick below. > > the end of file and making the handler functions use normal C > > declarations or aided with a macro. That separates the function and > > its table entry a lot, but I guess we don't want to use the #include > > trick this time? > > > I think PPC's translate.c should be just split and massaged a lot. Fully agree.