1 /* Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com 2 * Copyright (c) 2016 Facebook 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of version 2 of the GNU General Public 6 * License as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, but 9 * WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 * General Public License for more details. 12 */ 13 14 #ifndef __BPF_DISASM_H__ 15 #define __BPF_DISASM_H__ 16 17 #include <linux/bpf.h> 18 #include <linux/kernel.h> 19 #include <linux/stringify.h> 20 #ifndef __KERNEL__ 21 #include <stdio.h> 22 #include <string.h> 23 #endif 24 25 struct bpf_verifier_env; 26 27 extern const char *const bpf_alu_string[16]; 28 extern const char *const bpf_class_string[8]; 29 30 const char *func_id_name(int id); 31 32 typedef __printf(2, 3) void (*bpf_insn_print_t)(struct bpf_verifier_env *env, 33 const char *, ...); 34 typedef const char *(*bpf_insn_revmap_call_t)(void *private_data, 35 const struct bpf_insn *insn); 36 typedef const char *(*bpf_insn_print_imm_t)(void *private_data, 37 const struct bpf_insn *insn, 38 __u64 full_imm); 39 40 struct bpf_insn_cbs { 41 bpf_insn_print_t cb_print; 42 bpf_insn_revmap_call_t cb_call; 43 bpf_insn_print_imm_t cb_imm; 44 void *private_data; 45 }; 46 47 void print_bpf_insn(const struct bpf_insn_cbs *cbs, 48 struct bpf_verifier_env *env, 49 const struct bpf_insn *insn, 50 bool allow_ptr_leaks); 51 #endif 52