Rather than cast every __u64 or __s64 before printing, we can
define printing helpers for those types directly.

* defs.h: define PRI__[uxs]64.
---
 defs.h | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/defs.h b/defs.h
index ead12dd..cc2a0d4 100644
--- a/defs.h
+++ b/defs.h
@@ -772,3 +772,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(__mips__) || defined(__powerpc__) || defined(__alpha__) || 
defined(__ia64__)
+#define PRI__64 "l"
+#else
+#define PRI__64 "ll"
+#endif
+
+#define PRI__u64 PRI__64"u"
+#define PRI__s64 PRI__64"d"
+#define PRI__x64 PRI__64"x"
-- 
2.7.1


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to