STRACE_PRINTF("%s%s=%#llx", (prefix_), #field_, \
zero_extend_signed_to_ull((where_).field_))
+#define PRINT_FIELD_ADDR(prefix_, where_, field_) \
+ do { \
+ STRACE_PRINTF("%s%s=", (prefix_), #field_); \
+ printaddr((where_).field_); \
+ } while (0)
+
+#define PRINT_FIELD_ADDR64(prefix_, where_, field_) \
+ do { \
+ STRACE_PRINTF("%s%s=", (prefix_), #field_); \
+ printaddr64((where_).field_); \
+ } while (0)
+
#define PRINT_FIELD_0X(prefix_, where_, field_) \
STRACE_PRINTF("%s%s=%#0*llx", (prefix_), #field_, \
(int) sizeof((where_).field_) * 2, \
(dflt_)); \
} while (0)
+#define PRINT_FIELD_XVAL_U(prefix_, where_, field_, xlat_, dflt_) \
+ do { \
+ STRACE_PRINTF("%s%s=", (prefix_), #field_); \
+ printxvals_ex(zero_extend_signed_to_ull((where_).field_), \
+ (dflt_), XLAT_STYLE_FMT_U, \
+ (xlat_), NULL); \
+ } while (0)
+
+#define PRINT_FIELD_XVAL_SORTED_SIZED(prefix_, where_, field_, xlat_, \
+ xlat_size_, dflt_) \
+ do { \
+ STRACE_PRINTF("%s%s=", (prefix_), #field_); \
+ printxval_searchn((xlat_), (xlat_size_), \
+ zero_extend_signed_to_ull((where_).field_), \
+ (dflt_)); \
+ } while (0)
+
+#define PRINT_FIELD_XVAL_INDEX(prefix_, where_, field_, xlat_, dflt_) \
+ do { \
+ STRACE_PRINTF("%s%s=", (prefix_), #field_); \
+ printxval_index((xlat_), \
+ zero_extend_signed_to_ull((where_).field_), \
+ (dflt_)); \
+ } while (0)
+
/*
* Generic "ID" printing. ID is considered unsigned except for the special value
* of -1.
#define PRINT_FIELD_UID PRINT_FIELD_ID
+#define PRINT_FIELD_U64(prefix_, where_, field_) \
+ do { \
+ STRACE_PRINTF("%s%s=", (prefix_), #field_); \
+ if (zero_extend_signed_to_ull((where_).field_) == UINT64_MAX) \
+ print_xlat_ex(UINT64_MAX, "UINT64_MAX", XLAT_STYLE_FMT_U); \
+ else \
+ STRACE_PRINTF("%llu", \
+ zero_extend_signed_to_ull((where_).field_)); \
+ } while (0)
+
#define PRINT_FIELD_STRING(prefix_, where_, field_, len_, style_) \
do { \
STRACE_PRINTF("%s%s=", (prefix_), #field_); \
#define PRINT_FIELD_CSTRING(prefix_, where_, field_) \
do { \
STRACE_PRINTF("%s%s=", (prefix_), #field_); \
- print_quoted_cstring((const char *)(where_).field_, \
- sizeof((where_).field_)); \
+ print_quoted_cstring((const char *) (where_).field_, \
+ sizeof((where_).field_) + \
+ MUST_BE_ARRAY((where_).field_)); \
+ } while (0)
+
+#define PRINT_FIELD_CSTRING_SZ(prefix_, where_, field_, size_) \
+ do { \
+ STRACE_PRINTF("%s%s=", (prefix_), #field_); \
+ print_quoted_cstring((const char *) (where_).field_, \
+ (size_)); \
} while (0)
#define PRINT_FIELD_HEX_ARRAY(prefix_, where_, field_) \
do { \
STRACE_PRINTF("%s%s=", (prefix_), #field_); \
print_quoted_string((const char *)(where_).field_, \
- sizeof((where_).field_) + \
+ sizeof((where_).field_) + \
MUST_BE_ARRAY((where_).field_), \
QUOTE_FORCE_HEX); \
} while (0)
printpath((tcp_), (where_).field_); \
} while (0)
+#define PRINT_FIELD_MAC(prefix_, where_, field_) \
+ PRINT_FIELD_MAC_SZ((prefix_), (where_), field_, \
+ ARRAY_SIZE((where_).field_))
+
+#define PRINT_FIELD_MAC_SZ(prefix_, where_, field_, size_) \
+ do { \
+ static_assert(sizeof(((where_).field_)[0]) == 1, \
+ "MAC address is not a byte array"); \
+ STRACE_PRINTF("%s%s=", (prefix_), #field_); \
+ print_mac_addr("", (const uint8_t *) ((where_).field_), \
+ (size_)); \
+ } while (0)
+
#endif /* !STRACE_PRINT_FIELDS_H */