xref: /openbmc/linux/tools/perf/util/intel-pt-decoder/intel-pt-insn-decoder.h (revision 32f98aab75dd385e326c975717f8b730c6c57508)
1237fae79SAdrian Hunter /*
2237fae79SAdrian Hunter  * intel_pt_insn_decoder.h: Intel Processor Trace support
3237fae79SAdrian Hunter  * Copyright (c) 2013-2014, Intel Corporation.
4237fae79SAdrian Hunter  *
5237fae79SAdrian Hunter  * This program is free software; you can redistribute it and/or modify it
6237fae79SAdrian Hunter  * under the terms and conditions of the GNU General Public License,
7237fae79SAdrian Hunter  * version 2, as published by the Free Software Foundation.
8237fae79SAdrian Hunter  *
9237fae79SAdrian Hunter  * This program is distributed in the hope it will be useful, but WITHOUT
10237fae79SAdrian Hunter  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11237fae79SAdrian Hunter  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12237fae79SAdrian Hunter  * more details.
13237fae79SAdrian Hunter  *
14237fae79SAdrian Hunter  */
15237fae79SAdrian Hunter 
16237fae79SAdrian Hunter #ifndef INCLUDE__INTEL_PT_INSN_DECODER_H__
17237fae79SAdrian Hunter #define INCLUDE__INTEL_PT_INSN_DECODER_H__
18237fae79SAdrian Hunter 
19237fae79SAdrian Hunter #include <stddef.h>
20237fae79SAdrian Hunter #include <stdint.h>
21237fae79SAdrian Hunter 
22237fae79SAdrian Hunter #define INTEL_PT_INSN_DESC_MAX		32
23*32f98aabSAdrian Hunter #define INTEL_PT_INSN_BUF_SZ		16
24237fae79SAdrian Hunter 
25237fae79SAdrian Hunter enum intel_pt_insn_op {
26237fae79SAdrian Hunter 	INTEL_PT_OP_OTHER,
27237fae79SAdrian Hunter 	INTEL_PT_OP_CALL,
28237fae79SAdrian Hunter 	INTEL_PT_OP_RET,
29237fae79SAdrian Hunter 	INTEL_PT_OP_JCC,
30237fae79SAdrian Hunter 	INTEL_PT_OP_JMP,
31237fae79SAdrian Hunter 	INTEL_PT_OP_LOOP,
32237fae79SAdrian Hunter 	INTEL_PT_OP_IRET,
33237fae79SAdrian Hunter 	INTEL_PT_OP_INT,
34237fae79SAdrian Hunter 	INTEL_PT_OP_SYSCALL,
35237fae79SAdrian Hunter 	INTEL_PT_OP_SYSRET,
36237fae79SAdrian Hunter };
37237fae79SAdrian Hunter 
38237fae79SAdrian Hunter enum intel_pt_insn_branch {
39237fae79SAdrian Hunter 	INTEL_PT_BR_NO_BRANCH,
40237fae79SAdrian Hunter 	INTEL_PT_BR_INDIRECT,
41237fae79SAdrian Hunter 	INTEL_PT_BR_CONDITIONAL,
42237fae79SAdrian Hunter 	INTEL_PT_BR_UNCONDITIONAL,
43237fae79SAdrian Hunter };
44237fae79SAdrian Hunter 
45237fae79SAdrian Hunter struct intel_pt_insn {
46237fae79SAdrian Hunter 	enum intel_pt_insn_op		op;
47237fae79SAdrian Hunter 	enum intel_pt_insn_branch	branch;
48237fae79SAdrian Hunter 	int				length;
49237fae79SAdrian Hunter 	int32_t				rel;
50*32f98aabSAdrian Hunter 	unsigned char			buf[INTEL_PT_INSN_BUF_SZ];
51237fae79SAdrian Hunter };
52237fae79SAdrian Hunter 
53237fae79SAdrian Hunter int intel_pt_get_insn(const unsigned char *buf, size_t len, int x86_64,
54237fae79SAdrian Hunter 		      struct intel_pt_insn *intel_pt_insn);
55237fae79SAdrian Hunter 
56237fae79SAdrian Hunter const char *intel_pt_insn_name(enum intel_pt_insn_op op);
57237fae79SAdrian Hunter 
58237fae79SAdrian Hunter int intel_pt_insn_desc(const struct intel_pt_insn *intel_pt_insn, char *buf,
59237fae79SAdrian Hunter 		       size_t buf_len);
60237fae79SAdrian Hunter 
61237fae79SAdrian Hunter int intel_pt_insn_type(enum intel_pt_insn_op op);
62237fae79SAdrian Hunter 
63237fae79SAdrian Hunter #endif
64