xref: /aosp_15_r20/external/bpftool/src/kernel/bpf/disasm.h (revision 858ea5e570667251cdc31d3fe7b846b591105938)
1*858ea5e5SAndroid Build Coastguard Worker /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
2*858ea5e5SAndroid Build Coastguard Worker /* Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com
3*858ea5e5SAndroid Build Coastguard Worker  * Copyright (c) 2016 Facebook
4*858ea5e5SAndroid Build Coastguard Worker  */
5*858ea5e5SAndroid Build Coastguard Worker 
6*858ea5e5SAndroid Build Coastguard Worker #ifndef __BPF_DISASM_H__
7*858ea5e5SAndroid Build Coastguard Worker #define __BPF_DISASM_H__
8*858ea5e5SAndroid Build Coastguard Worker 
9*858ea5e5SAndroid Build Coastguard Worker #include <linux/bpf.h>
10*858ea5e5SAndroid Build Coastguard Worker #include <linux/kernel.h>
11*858ea5e5SAndroid Build Coastguard Worker #include <linux/stringify.h>
12*858ea5e5SAndroid Build Coastguard Worker #ifndef __KERNEL__
13*858ea5e5SAndroid Build Coastguard Worker #include <stdio.h>
14*858ea5e5SAndroid Build Coastguard Worker #include <string.h>
15*858ea5e5SAndroid Build Coastguard Worker #endif
16*858ea5e5SAndroid Build Coastguard Worker 
17*858ea5e5SAndroid Build Coastguard Worker extern const char *const bpf_alu_string[16];
18*858ea5e5SAndroid Build Coastguard Worker extern const char *const bpf_class_string[8];
19*858ea5e5SAndroid Build Coastguard Worker 
20*858ea5e5SAndroid Build Coastguard Worker const char *func_id_name(int id);
21*858ea5e5SAndroid Build Coastguard Worker 
22*858ea5e5SAndroid Build Coastguard Worker typedef __printf(2, 3) void (*bpf_insn_print_t)(void *private_data,
23*858ea5e5SAndroid Build Coastguard Worker 						const char *, ...);
24*858ea5e5SAndroid Build Coastguard Worker typedef const char *(*bpf_insn_revmap_call_t)(void *private_data,
25*858ea5e5SAndroid Build Coastguard Worker 					      const struct bpf_insn *insn);
26*858ea5e5SAndroid Build Coastguard Worker typedef const char *(*bpf_insn_print_imm_t)(void *private_data,
27*858ea5e5SAndroid Build Coastguard Worker 					    const struct bpf_insn *insn,
28*858ea5e5SAndroid Build Coastguard Worker 					    __u64 full_imm);
29*858ea5e5SAndroid Build Coastguard Worker 
30*858ea5e5SAndroid Build Coastguard Worker struct bpf_insn_cbs {
31*858ea5e5SAndroid Build Coastguard Worker 	bpf_insn_print_t	cb_print;
32*858ea5e5SAndroid Build Coastguard Worker 	bpf_insn_revmap_call_t	cb_call;
33*858ea5e5SAndroid Build Coastguard Worker 	bpf_insn_print_imm_t	cb_imm;
34*858ea5e5SAndroid Build Coastguard Worker 	void			*private_data;
35*858ea5e5SAndroid Build Coastguard Worker };
36*858ea5e5SAndroid Build Coastguard Worker 
37*858ea5e5SAndroid Build Coastguard Worker void print_bpf_insn(const struct bpf_insn_cbs *cbs,
38*858ea5e5SAndroid Build Coastguard Worker 		    const struct bpf_insn *insn,
39*858ea5e5SAndroid Build Coastguard Worker 		    bool allow_ptr_leaks);
40*858ea5e5SAndroid Build Coastguard Worker #endif
41