[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 1/2] xen-detect: fix strict-aliasing compilation warning.



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>
---
 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;
-- 
1.9.3


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.