18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * intel_pt_insn_decoder.h: Intel Processor Trace support 48c2ecf20Sopenharmony_ci * Copyright (c) 2013-2014, Intel Corporation. 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#ifndef INCLUDE__INTEL_PT_INSN_DECODER_H__ 88c2ecf20Sopenharmony_ci#define INCLUDE__INTEL_PT_INSN_DECODER_H__ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#include <stddef.h> 118c2ecf20Sopenharmony_ci#include <stdint.h> 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#define INTEL_PT_INSN_DESC_MAX 32 148c2ecf20Sopenharmony_ci#define INTEL_PT_INSN_BUF_SZ 16 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_cienum intel_pt_insn_op { 178c2ecf20Sopenharmony_ci INTEL_PT_OP_OTHER, 188c2ecf20Sopenharmony_ci INTEL_PT_OP_CALL, 198c2ecf20Sopenharmony_ci INTEL_PT_OP_RET, 208c2ecf20Sopenharmony_ci INTEL_PT_OP_JCC, 218c2ecf20Sopenharmony_ci INTEL_PT_OP_JMP, 228c2ecf20Sopenharmony_ci INTEL_PT_OP_LOOP, 238c2ecf20Sopenharmony_ci INTEL_PT_OP_IRET, 248c2ecf20Sopenharmony_ci INTEL_PT_OP_INT, 258c2ecf20Sopenharmony_ci INTEL_PT_OP_SYSCALL, 268c2ecf20Sopenharmony_ci INTEL_PT_OP_SYSRET, 278c2ecf20Sopenharmony_ci}; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_cienum intel_pt_insn_branch { 308c2ecf20Sopenharmony_ci INTEL_PT_BR_NO_BRANCH, 318c2ecf20Sopenharmony_ci INTEL_PT_BR_INDIRECT, 328c2ecf20Sopenharmony_ci INTEL_PT_BR_CONDITIONAL, 338c2ecf20Sopenharmony_ci INTEL_PT_BR_UNCONDITIONAL, 348c2ecf20Sopenharmony_ci}; 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_cistruct intel_pt_insn { 378c2ecf20Sopenharmony_ci enum intel_pt_insn_op op; 388c2ecf20Sopenharmony_ci enum intel_pt_insn_branch branch; 398c2ecf20Sopenharmony_ci int length; 408c2ecf20Sopenharmony_ci int32_t rel; 418c2ecf20Sopenharmony_ci unsigned char buf[INTEL_PT_INSN_BUF_SZ]; 428c2ecf20Sopenharmony_ci}; 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ciint intel_pt_get_insn(const unsigned char *buf, size_t len, int x86_64, 458c2ecf20Sopenharmony_ci struct intel_pt_insn *intel_pt_insn); 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ciconst char *intel_pt_insn_name(enum intel_pt_insn_op op); 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ciint intel_pt_insn_desc(const struct intel_pt_insn *intel_pt_insn, char *buf, 508c2ecf20Sopenharmony_ci size_t buf_len); 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ciint intel_pt_insn_type(enum intel_pt_insn_op op); 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ci#endif 55