]> granicus.if.org Git - strace/blobdiff - kernel_types.h
nlattr: add UID/GID netlink attribute decoders
[strace] / kernel_types.h
index c54af74e7c06c33927ca62cfac9da571d8303cb6..79ac171c2b4b40f778385c69c1b7e53d5920b1eb 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -47,9 +48,6 @@ typedef unsigned long kernel_ulong_t;
 
 # endif
 
-typedef unsigned long kernel_scno_t;
-typedef unsigned long kernel_ureg_t;
-
 typedef struct {
        kernel_ulong_t  d_ino;
        kernel_ulong_t  d_off;
@@ -57,4 +55,36 @@ typedef struct {
        char            d_name[1];
 } kernel_dirent;
 
+#if SIZEOF_KERNEL_LONG_T > SIZEOF_LONG
+# define PRI_kl "ll"
+#else
+# define PRI_kl "l"
+#endif
+
+#define PRI_kld PRI_kl"d"
+#define PRI_klu PRI_kl"u"
+#define PRI_klx PRI_kl"x"
+
+/*
+ * 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.
+ * The exception is Android, where for MIPS64 unsigned long long is used.
+ */
+#if SIZEOF_LONG == 4
+# define PRI__64 "ll"
+#elif defined ALPHA || defined IA64 || defined __powerpc64__ \
+      || (defined MIPS && !defined __ANDROID__)
+# 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 /* !STRACE_KERNEL_TYPES_H */