xref: /openbmc/linux/tools/perf/util/intel-pt-decoder/intel-pt-insn-decoder.h (revision 237fae79f50d2d0c7bdeb039bc2c87fc6d52c7e7)
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