0001
0002
0003
0004
0005
0006
0007 #ifndef INCLUDE__INTEL_PT_PKT_DECODER_H__
0008 #define INCLUDE__INTEL_PT_PKT_DECODER_H__
0009
0010 #include <stddef.h>
0011 #include <stdint.h>
0012
0013 #define INTEL_PT_PKT_DESC_MAX 256
0014
0015 #define INTEL_PT_NEED_MORE_BYTES -1
0016 #define INTEL_PT_BAD_PACKET -2
0017
0018 #define INTEL_PT_PSB_STR "\002\202\002\202\002\202\002\202" \
0019 "\002\202\002\202\002\202\002\202"
0020 #define INTEL_PT_PSB_LEN 16
0021
0022 #define INTEL_PT_PKT_MAX_SZ 16
0023
0024 #define INTEL_PT_VMX_NR_FLAG 1
0025
0026 enum intel_pt_pkt_type {
0027 INTEL_PT_BAD,
0028 INTEL_PT_PAD,
0029 INTEL_PT_TNT,
0030 INTEL_PT_TIP_PGD,
0031 INTEL_PT_TIP_PGE,
0032 INTEL_PT_TSC,
0033 INTEL_PT_TMA,
0034 INTEL_PT_MODE_EXEC,
0035 INTEL_PT_MODE_TSX,
0036 INTEL_PT_MTC,
0037 INTEL_PT_TIP,
0038 INTEL_PT_FUP,
0039 INTEL_PT_CYC,
0040 INTEL_PT_VMCS,
0041 INTEL_PT_PSB,
0042 INTEL_PT_PSBEND,
0043 INTEL_PT_CBR,
0044 INTEL_PT_TRACESTOP,
0045 INTEL_PT_PIP,
0046 INTEL_PT_OVF,
0047 INTEL_PT_MNT,
0048 INTEL_PT_PTWRITE,
0049 INTEL_PT_PTWRITE_IP,
0050 INTEL_PT_EXSTOP,
0051 INTEL_PT_EXSTOP_IP,
0052 INTEL_PT_MWAIT,
0053 INTEL_PT_PWRE,
0054 INTEL_PT_PWRX,
0055 INTEL_PT_BBP,
0056 INTEL_PT_BIP,
0057 INTEL_PT_BEP,
0058 INTEL_PT_BEP_IP,
0059 INTEL_PT_CFE,
0060 INTEL_PT_CFE_IP,
0061 INTEL_PT_EVD,
0062 };
0063
0064 struct intel_pt_pkt {
0065 enum intel_pt_pkt_type type;
0066 int count;
0067 uint64_t payload;
0068 };
0069
0070
0071
0072
0073
0074
0075 enum intel_pt_pkt_ctx {
0076 INTEL_PT_NO_CTX,
0077 INTEL_PT_BLK_4_CTX,
0078 INTEL_PT_BLK_8_CTX,
0079 };
0080
0081 const char *intel_pt_pkt_name(enum intel_pt_pkt_type);
0082
0083 int intel_pt_get_packet(const unsigned char *buf, size_t len,
0084 struct intel_pt_pkt *packet,
0085 enum intel_pt_pkt_ctx *ctx);
0086
0087 void intel_pt_upd_pkt_ctx(const struct intel_pt_pkt *packet,
0088 enum intel_pt_pkt_ctx *ctx);
0089
0090 int intel_pt_pkt_desc(const struct intel_pt_pkt *packet, char *buf, size_t len);
0091
0092 #endif