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 extern const char *const bpf_alu_string[16]; 26 extern const char *const bpf_class_string[8]; 27 28 const char *func_id_name(int id); 29 30 typedef __printf(2, 3) void (*bpf_insn_print_t)(void *private_data, 31 const char *, ...); 32 typedef const char *(*bpf_insn_revmap_call_t)(void *private_data, 33 const struct bpf_insn *insn); 34 typedef const char *(*bpf_insn_print_imm_t)(void *private_data, 35 const struct bpf_insn *insn, 36 __u64 full_imm); 37 38 struct bpf_insn_cbs { 39 bpf_insn_print_t cb_print; 40 bpf_insn_revmap_call_t cb_call; 41 bpf_insn_print_imm_t cb_imm; 42 void *private_data; 43 }; 44 45 void print_bpf_insn(const struct bpf_insn_cbs *cbs, 46 const struct bpf_insn *insn, 47 bool allow_ptr_leaks); 48 #endif 49