[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/2] xen-detect: fix strict-aliasing compilation warning.
On 01/12/14 14:37, John Haxby wrote: > With gcc 4.8.3, compiling xen-detect gives a compilation warning if > you're optimising: > > $ cc -Wall -Os xen-detect.c > xen-detect.c: In function âcheck_for_xenâ: > xen-detect.c:65:9: warning: dereferencing type-punned pointer will break > strict-aliasing rules [-Wstrict-aliasing] > *(uint32_t *)(signature + 0) = regs[1]; > ^ > > Signed-off-by: John Haxby <john.haxby@xxxxxxxxxx> Why are you compiling without the CFLAGS from the Xen build system? We explicitly disable strict alias optimisations, because optimisations based upon the aliasing rules in C is mad. Even when you eliminate all the warnings, there are still subtle bugs because the compiler is free to assume a lot more than a programmer would typically deem reasonable. ~Andrew > --- > tools/misc/xen-detect.c | 21 ++++++++++----------- > 1 file changed, 10 insertions(+), 11 deletions(-) > > diff --git a/tools/misc/xen-detect.c b/tools/misc/xen-detect.c > index 787b5da..19c66d1 100644 > --- a/tools/misc/xen-detect.c > +++ b/tools/misc/xen-detect.c > @@ -54,28 +54,27 @@ static void cpuid(uint32_t idx, uint32_t *regs, int > pv_context) > > static int check_for_xen(int pv_context) > { > - uint32_t regs[4]; > - char signature[13]; > + union > + { > + uint32_t regs[4]; > + char signature[17]; > + } u; > uint32_t base; > > for ( base = 0x40000000; base < 0x40010000; base += 0x100 ) > { > - cpuid(base, regs, pv_context); > - > - *(uint32_t *)(signature + 0) = regs[1]; > - *(uint32_t *)(signature + 4) = regs[2]; > - *(uint32_t *)(signature + 8) = regs[3]; > - signature[12] = '\0'; > + cpuid(base, u.regs, pv_context); > + u.signature[16] = '\0'; > > - if ( !strcmp("XenVMMXenVMM", signature) && (regs[0] >= (base + 2)) ) > + if ( !strcmp("XenVMMXenVMM", u.signature+4) && (u.regs[0] >= (base + > 2)) ) > goto found; > } > > return 0; > > found: > - cpuid(base + 1, regs, pv_context); > - return regs[0]; > + cpuid(base + 1, u.regs, pv_context); > + return u.regs[0]; > } > > static jmp_buf sigill_jmp; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |