From patchwork Wed Mar 11 18:10:08 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jochen Roth X-Patchwork-Id: 11181 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n2BI9Hrc015117 for ; Wed, 11 Mar 2009 18:10:12 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751923AbZCKSKM (ORCPT ); Wed, 11 Mar 2009 14:10:12 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751874AbZCKSKM (ORCPT ); Wed, 11 Mar 2009 14:10:12 -0400 Received: from mtagate3.uk.ibm.com ([195.212.29.136]:50944 "EHLO mtagate3.uk.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751406AbZCKSKL (ORCPT ); Wed, 11 Mar 2009 14:10:11 -0400 Received: from d06nrmr1407.portsmouth.uk.ibm.com (d06nrmr1407.portsmouth.uk.ibm.com [9.149.38.185]) by mtagate3.uk.ibm.com (8.14.3/8.13.8) with ESMTP id n2BIA9Em151630 for ; Wed, 11 Mar 2009 18:10:09 GMT Received: from d06av04.portsmouth.uk.ibm.com (d06av04.portsmouth.uk.ibm.com [9.149.37.216]) by d06nrmr1407.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v9.2) with ESMTP id n2BIA9FR3387498 for ; Wed, 11 Mar 2009 18:10:09 GMT Received: from d06av04.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av04.portsmouth.uk.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id n2BIA9sq017872 for ; Wed, 11 Mar 2009 18:10:09 GMT Received: from pinhighwedge.boeblingen.de.ibm.com (dyn-9-152-222-61.boeblingen.de.ibm.com [9.152.222.61]) by d06av04.portsmouth.uk.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id n2BIA8Bd017862 for ; Wed, 11 Mar 2009 18:10:08 GMT Message-ID: <49B7FE80.1010307@linux.vnet.ibm.com> Date: Wed, 11 Mar 2009 19:10:08 +0100 From: Jochen Roth User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: kvm@vger.kernel.org Subject: potential gcc bug causes kvm-userspace build break Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org FYI I just discovered a potential gcc bug which causes kvm-userspace builds to break. I looks like it happens only with the latest fedora rawhide gcc 4.4 https://bugzilla.redhat.com/show_bug.cgi?id=489753 The following patch circumvents this problem by just renaming R to REG. People facing the same problem might find this patch useful. --- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/user/test/x86/apic.c b/user/test/x86/apic.c index 9c6205b..ec3777c 100644 --- a/user/test/x86/apic.c +++ b/user/test/x86/apic.c @@ -35,9 +35,9 @@ typedef struct { } isr_regs_t; #ifdef __x86_64__ -# define R "r" +# define REG "r" #else -# define R "e" +# define REG "e" #endif extern char isr_entry_point[]; @@ -54,14 +54,14 @@ asm ( "push %r9 \n\t" "push %r8 \n\t" #endif - "push %"R"di \n\t" - "push %"R"si \n\t" - "push %"R"bp \n\t" - "push %"R"sp \n\t" - "push %"R"bx \n\t" - "push %"R"dx \n\t" - "push %"R"cx \n\t" - "push %"R"ax \n\t" + "push %"REG"di \n\t" + "push %"REG"si \n\t" + "push %"REG"bp \n\t" + "push %"REG"sp \n\t" + "push %"REG"bx \n\t" + "push %"REG"dx \n\t" + "push %"REG"cx \n\t" + "push %"REG"ax \n\t" #ifdef __x86_64__ "mov %rsp, %rdi \n\t" "callq *8*16(%rsp) \n\t" @@ -70,14 +70,14 @@ asm ( "calll *4+4*8(%esp) \n\t" "add $4, %esp \n\t" #endif - "pop %"R"ax \n\t" - "pop %"R"cx \n\t" - "pop %"R"dx \n\t" - "pop %"R"bx \n\t" - "pop %"R"bp \n\t" - "pop %"R"bp \n\t" - "pop %"R"si \n\t" - "pop %"R"di \n\t" + "pop %"REG"ax \n\t" + "pop %"REG"cx \n\t" + "pop %"REG"dx \n\t" + "pop %"REG"bx \n\t" + "pop %"REG"bp \n\t" + "pop %"REG"bp \n\t" + "pop %"REG"si \n\t" + "pop %"REG"di \n\t" #ifdef __x86_64__ "pop %r8 \n\t" "pop %r9 \n\t" diff --git a/user/test/x86/vmexit.c b/user/test/x86/vmexit.c index bd57bfa..bc81be9 100644 --- a/user/test/x86/vmexit.c +++ b/user/test/x86/vmexit.c @@ -19,9 +19,9 @@ static inline unsigned long long rdtsc() #define N (1 << 22) #ifdef __x86_64__ -# define R "r" +# define REG "r" #else -# define R "e" +# define REG "e" #endif int main() @@ -31,7 +31,7 @@ int main() t1 = rdtsc(); for (i = 0; i < N; ++i) - asm volatile ("push %%"R"bx; cpuid; pop %%"R"bx" + asm volatile ("push %%"REG"bx; cpuid; pop %%"REG"bx" : : : "eax", "ecx", "edx"); t2 = rdtsc(); printf("vmexit latency: %d\n", (int)((t2 - t1) / N));