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


------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to