From: Jeff Mahoney Date: Thu, 31 Mar 2016 04:34:17 +0000 (-0400) Subject: Define PRI__[uxs]64 macros to print __s64 and __u64 values X-Git-Tag: v4.12~469 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1f3482bedad505a41caf1d61b3a4e7e09a2f4330;p=strace Define PRI__[uxs]64 macros to print __s64 and __u64 values 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. --- diff --git a/defs.h b/defs.h index f095ff6f..fb77b99c 100644 --- 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"