[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PULL 00/11] Misc changes for 2016-06-06
From: |
Peter Maydell |
Subject: |
Re: [Qemu-devel] [PULL 00/11] Misc changes for 2016-06-06 |
Date: |
Mon, 6 Jun 2016 20:35:24 +0100 |
On 6 June 2016 at 20:22, Dr. David Alan Gilbert <address@hidden> wrote:
> Sigh I see; so the configure test is run with a different set of compiler
> options than the main compiles? How is any configure test supposed to
> check that it's got a sane configuration?
I wasn't quite right -- we do run configure tests with ccache, we just
force it to not read the cache. So I think your problem is just that
your configure test doesn't fail when run under ccache, even though the
main cutils.c compile does:
$ cat /tmp/zz9.c
#pragma GCC push_options
#pragma GCC target("avx2")
#include <cpuid.h>
#include <immintrin.h>
static int bar(void *a) {
return _mm256_movemask_epi8(_mm256_cmpeq_epi8(*(__m256i *)a, (__m256i){0}));
}
static void *bar_ifunc(void) {return (void*) bar;}
int foo(void *a) __attribute__((ifunc("bar_ifunc")));
int main(int argc, char *argv[]) { return foo(argv[0]);}
$ ccache gcc -g -Wall -o /tmp/zz9 /tmp/zz9.c
This seems to be because to get the compile failure you have
to be doing a .c to .o compile:
$ ccache gcc -g -Wall -o /tmp/zz9.o -c /tmp/zz9.c
/tmp/zz9.c: In function ‘bar’:
/tmp/zz9.c:7:5: warning: implicit declaration of function
‘_mm256_movemask_epi8’ [-Wimplicit-function-declaration]
return _mm256_movemask_epi8(_mm256_cmpeq_epi8(*(__m256i *)a,
(__m256i){0}));
^
/tmp/zz9.c:7:5: warning: implicit declaration of function
‘_mm256_cmpeq_epi8’ [-Wimplicit-function-declaration]
/tmp/zz9.c:7:53: error: ‘__m256i’ undeclared (first use in this function)
return _mm256_movemask_epi8(_mm256_cmpeq_epi8(*(__m256i *)a,
(__m256i){0}));
^
/tmp/zz9.c:7:53: note: each undeclared identifier is reported only
once for each function it appears in
/tmp/zz9.c:7:62: error: expected expression before ‘)’ token
return _mm256_movemask_epi8(_mm256_cmpeq_epi8(*(__m256i *)a,
(__m256i){0}));
^
/tmp/zz9.c:8:1: warning: control reaches end of non-void function
[-Wreturn-type]
}
^
but since your test is using compile_prog it does a .c to executable.
The difference is because ccache doesn't intercept .c-to-executable
compiles, so they go straight to real gcc and don't have -save-temps,
but it does intercept a .c-to-.o compile, which thus does get -save-temps
and so hits the gcc bug.
TLDR: if you make your configure test use compile_object it ought to
correctly detect that AVX2 doesn't work for this gcc+ccache combo.
thanks
-- PMM
- [Qemu-devel] [PULL 04/11] scsi: esp: check TI buffer index before read/write, (continued)
- [Qemu-devel] [PULL 04/11] scsi: esp: check TI buffer index before read/write, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 01/11] tests: Rename tests/Makefile to tests/Makefile.include, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 09/11] vnc: list the 'to' parameter of '-vnc' in the qemu man page, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 10/11] Make avx2 configure test work with -O2, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 07/11] Makefile: Derive "PKGVERSION" from "git describe" by default, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 06/11] Makefile: Add a "FORCE" target, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 11/11] avx2 configure: Use primitives in test, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 08/11] scsi-disk: add missing break, Paolo Bonzini, 2016/06/06
- Re: [Qemu-devel] [PULL 00/11] Misc changes for 2016-06-06, Peter Maydell, 2016/06/06