disasm.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. #ifndef __BPF_DISASM_H__
  14. #define __BPF_DISASM_H__
  15. #include <linux/bpf.h>
  16. #include <linux/kernel.h>
  17. #include <linux/stringify.h>
  18. #ifndef __KERNEL__
  19. #include <stdio.h>
  20. #include <string.h>
  21. #endif
  22. struct bpf_verifier_env;
  23. extern const char *const bpf_alu_string[16];
  24. extern const char *const bpf_class_string[8];
  25. const char *func_id_name(int id);
  26. typedef __printf(2, 3) void (*bpf_insn_print_t)(struct bpf_verifier_env *env,
  27. const char *, ...);
  28. typedef const char *(*bpf_insn_revmap_call_t)(void *private_data,
  29. const struct bpf_insn *insn);
  30. typedef const char *(*bpf_insn_print_imm_t)(void *private_data,
  31. const struct bpf_insn *insn,
  32. __u64 full_imm);
  33. struct bpf_insn_cbs {
  34. bpf_insn_print_t cb_print;
  35. bpf_insn_revmap_call_t cb_call;
  36. bpf_insn_print_imm_t cb_imm;
  37. void *private_data;
  38. };
  39. void print_bpf_insn(const struct bpf_insn_cbs *cbs,
  40. struct bpf_verifier_env *env,
  41. const struct bpf_insn *insn,
  42. bool allow_ptr_leaks);
  43. #endif