0001
0002
0003
0004
0005
0006
0007 #ifndef INCLUDE__INTEL_PT_LOG_H__
0008 #define INCLUDE__INTEL_PT_LOG_H__
0009
0010 #include <linux/compiler.h>
0011 #include <stdint.h>
0012 #include <inttypes.h>
0013
0014 struct intel_pt_pkt;
0015
0016 void *intel_pt_log_fp(void);
0017 void intel_pt_log_enable(void);
0018 void intel_pt_log_disable(void);
0019 void intel_pt_log_set_name(const char *name);
0020
0021 void __intel_pt_log_packet(const struct intel_pt_pkt *packet, int pkt_len,
0022 uint64_t pos, const unsigned char *buf);
0023
0024 struct intel_pt_insn;
0025
0026 void __intel_pt_log_insn(struct intel_pt_insn *intel_pt_insn, uint64_t ip);
0027 void __intel_pt_log_insn_no_data(struct intel_pt_insn *intel_pt_insn,
0028 uint64_t ip);
0029
0030 void __intel_pt_log(const char *fmt, ...) __printf(1, 2);
0031
0032 #define intel_pt_log(fmt, ...) \
0033 do { \
0034 if (intel_pt_enable_logging) \
0035 __intel_pt_log(fmt, ##__VA_ARGS__); \
0036 } while (0)
0037
0038 #define intel_pt_log_packet(arg, ...) \
0039 do { \
0040 if (intel_pt_enable_logging) \
0041 __intel_pt_log_packet(arg, ##__VA_ARGS__); \
0042 } while (0)
0043
0044 #define intel_pt_log_insn(arg, ...) \
0045 do { \
0046 if (intel_pt_enable_logging) \
0047 __intel_pt_log_insn(arg, ##__VA_ARGS__); \
0048 } while (0)
0049
0050 #define intel_pt_log_insn_no_data(arg, ...) \
0051 do { \
0052 if (intel_pt_enable_logging) \
0053 __intel_pt_log_insn_no_data(arg, ##__VA_ARGS__); \
0054 } while (0)
0055
0056 #define x64_fmt "0x%" PRIx64
0057
0058 extern bool intel_pt_enable_logging;
0059
0060 static inline void intel_pt_log_at(const char *msg, uint64_t u)
0061 {
0062 intel_pt_log("%s at " x64_fmt "\n", msg, u);
0063 }
0064
0065 static inline void intel_pt_log_to(const char *msg, uint64_t u)
0066 {
0067 intel_pt_log("%s to " x64_fmt "\n", msg, u);
0068 }
0069
0070 #define intel_pt_log_var(var, fmt) intel_pt_log("%s: " #var " " fmt "\n", __func__, var)
0071
0072 #define intel_pt_log_x32(var) intel_pt_log_var(var, "%#x")
0073 #define intel_pt_log_x64(var) intel_pt_log_var(var, "%#" PRIx64)
0074
0075 #endif