]> granicus.if.org Git - strace/commitdiff
tests: define PRI__[dux]64 macros to print __s64 and __u64 values
authorJeff Mahoney <jeffm@suse.com>
Wed, 18 May 2016 22:09:41 +0000 (18:09 -0400)
committerDmitry V. Levin <ldv@altlinux.org>
Sun, 22 May 2016 22:54:23 +0000 (22:54 +0000)
Rather than cast every __u64 or __s64 before printing,
define printing helpers for those types directly.

This complements commit 1f3482bedad505a41caf1d61b3a4e7e09a2f4330.

* tests/tests.h (PRI__d64, PRI__u64, PRI__x64): New macros.

tests/tests.h

index 9909222f1588ac37968f8d511b074eaa55cc4029..0205ea039b46eb68b74dec786de022066a3b7e72 100644 (file)
@@ -107,4 +107,24 @@ int printxval(const struct xlat *, const unsigned long long, const char *);
 # define SKIP_MAIN_UNDEFINED(arg) \
        int main(void) { error_msg_and_skip("undefined: %s", arg); }
 
+/*
+ * 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__d64 PRI__64"d"
+# define PRI__u64 PRI__64"u"
+# define PRI__x64 PRI__64"x"
+
 #endif