From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52461) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vfymc-0002Mb-Pb for qemu-devel@nongnu.org; Mon, 11 Nov 2013 16:12:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VfymV-0001iE-5x for qemu-devel@nongnu.org; Mon, 11 Nov 2013 16:12:30 -0500 Received: from mail.fgznet.ch ([81.92.96.47]:59866 helo=smtp.fgznet.ch) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VfymU-0001i1-SR for qemu-devel@nongnu.org; Mon, 11 Nov 2013 16:12:23 -0500 Message-ID: <52814821.2020803@FreeBSD.org> Date: Mon, 11 Nov 2013 22:12:01 +0100 From: Andreas Tobler MIME-Version: 1.0 References: <528139CB.7080502@FreeBSD.org> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] fix compilation/link with clang, target-i386/cpu.c List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: Paolo Bonzini , QEMU Developers On 11.11.13 22:02, Peter Maydell wrote: > On 11 November 2013 20:10, Andreas Tobler wrote: >> Paolo asked me to test and submit the below patch to fix compilation and >> link with clang. >> >> Paolo reduced the issue to a clang bug where dead code is not properly >> eliminated before linktime. (the clang bug ID: 17882) > > Thanks for the patch. However, it looks a bit odd to me. Can > you quote the error message clang produces, please? [tcx58:build/qemu/objdir] andreast% gmake CC x86_64-softmmu/target-i386/cpu.o LINK x86_64-softmmu/qemu-system-x86_64 target-i386/cpu.o: In function `cpu_x86_cpuid': /export/devel/net/src/qemu/qemu-master/target-i386/cpu.c:2203: undefined reference to `kvm_arch_get_supported_cpuid' /export/devel/net/src/qemu/qemu-master/target-i386/cpu.c:2204: undefined reference to `kvm_arch_get_supported_cpuid' /export/devel/net/src/qemu/qemu-master/target-i386/cpu.c:2223: undefined reference to `kvm_arch_get_supported_cpuid' cc: error: linker command failed with exit code 1 (use -v to see invocation) gmake[1]: *** [qemu-system-x86_64] Error 1 gmake: *** [subdir-x86_64-softmmu] Error 2 > I think I would agree with the commenter in the bug report you > reference (http://llvm.org/bugs/show_bug.cgi?id=17882) > that this is not a clang bug. We shouldn't be relying on the > compiler's dead code elimination to get rid of references to > functions that don't exist in certain configurations. This will > always be unreliable (especially if compiling without optimization). > Instead we should either be using ifdefs or stub functions (probably > the latter in this case). I know it is a difficult business. And probably you're right, but from a dump users point of view I do not agree. I'm used to gcc, which is able to compile this, and I expect other compilers to be able to do the same. The compiler should work for me not vice versa :) > If you put a stub implementation of kvm_arch_get_supported_cpuid() > into target-i386/kvm-stub.c does this fix the compilation issue? Will try and let you know. Thanks, Andreas