xref: /openbmc/linux/tools/perf/util/intel-pt-decoder/intel-pt-insn-decoder.h (revision 2025cf9e193de05b0654570dd639acb49ebd3adf)
1*2025cf9eSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2237fae79SAdrian Hunter /*
3237fae79SAdrian Hunter  * intel_pt_insn_decoder.h: Intel Processor Trace support
4237fae79SAdrian Hunter  * Copyright (c) 2013-2014, Intel Corporation.
5237fae79SAdrian Hunter  */
6237fae79SAdrian Hunter 
7237fae79SAdrian Hunter #ifndef INCLUDE__INTEL_PT_INSN_DECODER_H__
8237fae79SAdrian Hunter #define INCLUDE__INTEL_PT_INSN_DECODER_H__
9237fae79SAdrian Hunter 
10237fae79SAdrian Hunter #include <stddef.h>
11237fae79SAdrian Hunter #include <stdint.h>
12237fae79SAdrian Hunter 
13237fae79SAdrian Hunter #define INTEL_PT_INSN_DESC_MAX		32
1432f98aabSAdrian Hunter #define INTEL_PT_INSN_BUF_SZ		16
15237fae79SAdrian Hunter 
16237fae79SAdrian Hunter enum intel_pt_insn_op {
17237fae79SAdrian Hunter 	INTEL_PT_OP_OTHER,
18237fae79SAdrian Hunter 	INTEL_PT_OP_CALL,
19237fae79SAdrian Hunter 	INTEL_PT_OP_RET,
20237fae79SAdrian Hunter 	INTEL_PT_OP_JCC,
21237fae79SAdrian Hunter 	INTEL_PT_OP_JMP,
22237fae79SAdrian Hunter 	INTEL_PT_OP_LOOP,
23237fae79SAdrian Hunter 	INTEL_PT_OP_IRET,
24237fae79SAdrian Hunter 	INTEL_PT_OP_INT,
25237fae79SAdrian Hunter 	INTEL_PT_OP_SYSCALL,
26237fae79SAdrian Hunter 	INTEL_PT_OP_SYSRET,
27237fae79SAdrian Hunter };
28237fae79SAdrian Hunter 
29237fae79SAdrian Hunter enum intel_pt_insn_branch {
30237fae79SAdrian Hunter 	INTEL_PT_BR_NO_BRANCH,
31237fae79SAdrian Hunter 	INTEL_PT_BR_INDIRECT,
32237fae79SAdrian Hunter 	INTEL_PT_BR_CONDITIONAL,
33237fae79SAdrian Hunter 	INTEL_PT_BR_UNCONDITIONAL,
34237fae79SAdrian Hunter };
35237fae79SAdrian Hunter 
36237fae79SAdrian Hunter struct intel_pt_insn {
37237fae79SAdrian Hunter 	enum intel_pt_insn_op		op;
38237fae79SAdrian Hunter 	enum intel_pt_insn_branch	branch;
39237fae79SAdrian Hunter 	int				length;
40237fae79SAdrian Hunter 	int32_t				rel;
4132f98aabSAdrian Hunter 	unsigned char			buf[INTEL_PT_INSN_BUF_SZ];
42237fae79SAdrian Hunter };
43237fae79SAdrian Hunter 
44237fae79SAdrian Hunter int intel_pt_get_insn(const unsigned char *buf, size_t len, int x86_64,
45237fae79SAdrian Hunter 		      struct intel_pt_insn *intel_pt_insn);
46237fae79SAdrian Hunter 
47237fae79SAdrian Hunter const char *intel_pt_insn_name(enum intel_pt_insn_op op);
48237fae79SAdrian Hunter 
49237fae79SAdrian Hunter int intel_pt_insn_desc(const struct intel_pt_insn *intel_pt_insn, char *buf,
50237fae79SAdrian Hunter 		       size_t buf_len);
51237fae79SAdrian Hunter 
52237fae79SAdrian Hunter int intel_pt_insn_type(enum intel_pt_insn_op op);
53237fae79SAdrian Hunter 
54237fae79SAdrian Hunter #endif
55