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