]> xenbits.xensource.com Git - xen.git/commitdiff
xen/types: Correct the definition of uintptr_t
authorAndrew Cooper <andrew.cooper3@citrix.com>
Mon, 1 Aug 2016 12:36:44 +0000 (13:36 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 2 Aug 2016 09:33:06 +0000 (10:33 +0100)
uintptr_t is specified as unsigned int in 32bit, not unsigned long.  This is
why, when copying inttypes.h from GCC, the use of PRIxPTR and similar is
broken for 32bit builds.

Use __attribute__((__mode__(__pointer__))) to get the compilers default
pointer type, which matches the pre-existing inttypes.h

Fix the identified breakage with ELF_PRPTRVAL

Compile tested on all architectures, with a manual printk() to trigger any
potential -Wformat issues.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
xen/include/xen/libelf.h
xen/include/xen/types.h

index 95b5370ab48f870bcd5e9e63683b40ce5a3b9966..d430c83b5d5fdec5dcb20686c86ae81a033c4560 100644 (file)
@@ -83,15 +83,7 @@ typedef uintptr_t elf_ptrval;
 #define ELF_HANDLE_DECL(structname)          structname##_handle
   /* Provides a type declaration for a HANDLE. */
 
-#ifdef __XEN__
-# define ELF_PRPTRVAL "lx"
-  /*
-   * PRIxPTR is misdefined in xen/include/xen/inttypes.h, on 32-bit,
-   * to "x", when in fact uintptr_t is an unsigned long.
-   */
-#else
-# define ELF_PRPTRVAL PRIxPTR
-#endif
+#define ELF_PRPTRVAL PRIxPTR
   /* printf format a la PRId... for a PTRVAL */
 
 #define ELF_DEFINE_HANDLE(structname)                                   \
index c8092d0716135ee13414af4fa9e8b1b728aab076..7bdc83bc2fade22ef1711020c0a0beb0141c5984 100644 (file)
@@ -59,7 +59,7 @@ typedef __u32 __be32;
 typedef __u64 __le64;
 typedef __u64 __be64;
 
-typedef unsigned long uintptr_t;
+typedef unsigned int __attribute__((__mode__(__pointer__))) uintptr_t;
 
 typedef bool bool_t;
 #define test_and_set_bool(b)   xchg(&(b), true)