1*237fae79SAdrian Hunter /* 2*237fae79SAdrian Hunter * intel_pt_insn_decoder.h: Intel Processor Trace support 3*237fae79SAdrian Hunter * Copyright (c) 2013-2014, Intel Corporation. 4*237fae79SAdrian Hunter * 5*237fae79SAdrian Hunter * This program is free software; you can redistribute it and/or modify it 6*237fae79SAdrian Hunter * under the terms and conditions of the GNU General Public License, 7*237fae79SAdrian Hunter * version 2, as published by the Free Software Foundation. 8*237fae79SAdrian Hunter * 9*237fae79SAdrian Hunter * This program is distributed in the hope it will be useful, but WITHOUT 10*237fae79SAdrian Hunter * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11*237fae79SAdrian Hunter * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12*237fae79SAdrian Hunter * more details. 13*237fae79SAdrian Hunter * 14*237fae79SAdrian Hunter */ 15*237fae79SAdrian Hunter 16*237fae79SAdrian Hunter #ifndef INCLUDE__INTEL_PT_INSN_DECODER_H__ 17*237fae79SAdrian Hunter #define INCLUDE__INTEL_PT_INSN_DECODER_H__ 18*237fae79SAdrian Hunter 19*237fae79SAdrian Hunter #include <stddef.h> 20*237fae79SAdrian Hunter #include <stdint.h> 21*237fae79SAdrian Hunter 22*237fae79SAdrian Hunter #define INTEL_PT_INSN_DESC_MAX 32 23*237fae79SAdrian Hunter #define INTEL_PT_INSN_DBG_BUF_SZ 16 24*237fae79SAdrian Hunter 25*237fae79SAdrian Hunter enum intel_pt_insn_op { 26*237fae79SAdrian Hunter INTEL_PT_OP_OTHER, 27*237fae79SAdrian Hunter INTEL_PT_OP_CALL, 28*237fae79SAdrian Hunter INTEL_PT_OP_RET, 29*237fae79SAdrian Hunter INTEL_PT_OP_JCC, 30*237fae79SAdrian Hunter INTEL_PT_OP_JMP, 31*237fae79SAdrian Hunter INTEL_PT_OP_LOOP, 32*237fae79SAdrian Hunter INTEL_PT_OP_IRET, 33*237fae79SAdrian Hunter INTEL_PT_OP_INT, 34*237fae79SAdrian Hunter INTEL_PT_OP_SYSCALL, 35*237fae79SAdrian Hunter INTEL_PT_OP_SYSRET, 36*237fae79SAdrian Hunter }; 37*237fae79SAdrian Hunter 38*237fae79SAdrian Hunter enum intel_pt_insn_branch { 39*237fae79SAdrian Hunter INTEL_PT_BR_NO_BRANCH, 40*237fae79SAdrian Hunter INTEL_PT_BR_INDIRECT, 41*237fae79SAdrian Hunter INTEL_PT_BR_CONDITIONAL, 42*237fae79SAdrian Hunter INTEL_PT_BR_UNCONDITIONAL, 43*237fae79SAdrian Hunter }; 44*237fae79SAdrian Hunter 45*237fae79SAdrian Hunter struct intel_pt_insn { 46*237fae79SAdrian Hunter enum intel_pt_insn_op op; 47*237fae79SAdrian Hunter enum intel_pt_insn_branch branch; 48*237fae79SAdrian Hunter int length; 49*237fae79SAdrian Hunter int32_t rel; 50*237fae79SAdrian Hunter unsigned char buf[INTEL_PT_INSN_DBG_BUF_SZ]; 51*237fae79SAdrian Hunter }; 52*237fae79SAdrian Hunter 53*237fae79SAdrian Hunter int intel_pt_get_insn(const unsigned char *buf, size_t len, int x86_64, 54*237fae79SAdrian Hunter struct intel_pt_insn *intel_pt_insn); 55*237fae79SAdrian Hunter 56*237fae79SAdrian Hunter const char *intel_pt_insn_name(enum intel_pt_insn_op op); 57*237fae79SAdrian Hunter 58*237fae79SAdrian Hunter int intel_pt_insn_desc(const struct intel_pt_insn *intel_pt_insn, char *buf, 59*237fae79SAdrian Hunter size_t buf_len); 60*237fae79SAdrian Hunter 61*237fae79SAdrian Hunter size_t intel_pt_insn_max_size(void); 62*237fae79SAdrian Hunter 63*237fae79SAdrian Hunter int intel_pt_insn_type(enum intel_pt_insn_op op); 64*237fae79SAdrian Hunter 65*237fae79SAdrian Hunter #endif 66