]> granicus.if.org Git - strace/commitdiff
Define PRI__[uxs]64 macros to print __s64 and __u64 values
authorJeff Mahoney <jeffm@suse.com>
Thu, 31 Mar 2016 04:34:17 +0000 (00:34 -0400)
committerDmitry V. Levin <ldv@altlinux.org>
Thu, 31 Mar 2016 04:34:17 +0000 (04:34 +0000)
Rather than cast every __u64 or __s64 before printing,
define printing helpers for those types directly.

* defs.h (PRI__s64, PRI__u64, PRI__x64): New macros.

defs.h

diff --git a/defs.h b/defs.h
index f095ff6f85376b8aa2fbccbfc0ef21bbda18782e..fb77b99c71a851b82627dcafa905711e7fb05293 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -769,3 +769,23 @@ extern unsigned num_quals;
 #define SYS_FUNC(syscall_name) int SYS_FUNC_NAME(sys_ ## syscall_name)(struct tcb *tcp)
 
 #define MPERS_PRINTER_DECL(type, name) type MPERS_FUNC_NAME(name)
+
+/*
+ * The kernel used to define 64-bit types on 64-bit systems on a per-arch
+ * basis.  Some architectures would use unsigned long and others would use
+ * unsigned long long.  These types were exported as part of the
+ * kernel-userspace ABI and now must be maintained forever.  This matches
+ * what the kernel exports for each architecture so we don't need to cast
+ * every printing of __u64 or __s64 to stdint types.
+ */
+#if SIZEOF_LONG == 4
+# define PRI__64 "ll"
+#elif defined ALPHA || defined IA64 || defined MIPS || defined POWERPC
+# define PRI__64 "l"
+#else
+# define PRI__64 "ll"
+#endif
+
+#define PRI__s64 PRI__64"d"
+#define PRI__u64 PRI__64"u"
+#define PRI__x64 PRI__64"x"