diff options
Diffstat (limited to 'tools/bpf')
| -rw-r--r-- | tools/bpf/bpftool/common.c | 5 | ||||
| -rw-r--r-- | tools/bpf/bpftool/jit_disasm.c | 4 | ||||
| -rw-r--r-- | tools/bpf/bpftool/main.h | 6 | ||||
| -rw-r--r-- | tools/bpf/bpftool/prog.c | 14 |
4 files changed, 20 insertions, 9 deletions
diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c index 3318da8060bd..25af85304ebe 100644 --- a/tools/bpf/bpftool/common.c +++ b/tools/bpf/bpftool/common.c | |||
| @@ -554,7 +554,9 @@ static int read_sysfs_netdev_hex_int(char *devname, const char *entry_name) | |||
| 554 | return read_sysfs_hex_int(full_path); | 554 | return read_sysfs_hex_int(full_path); |
| 555 | } | 555 | } |
| 556 | 556 | ||
| 557 | const char *ifindex_to_bfd_name_ns(__u32 ifindex, __u64 ns_dev, __u64 ns_ino) | 557 | const char * |
| 558 | ifindex_to_bfd_params(__u32 ifindex, __u64 ns_dev, __u64 ns_ino, | ||
| 559 | const char **opt) | ||
| 558 | { | 560 | { |
| 559 | char devname[IF_NAMESIZE]; | 561 | char devname[IF_NAMESIZE]; |
| 560 | int vendor_id; | 562 | int vendor_id; |
| @@ -579,6 +581,7 @@ const char *ifindex_to_bfd_name_ns(__u32 ifindex, __u64 ns_dev, __u64 ns_ino) | |||
| 579 | device_id != 0x6000 && | 581 | device_id != 0x6000 && |
| 580 | device_id != 0x6003) | 582 | device_id != 0x6003) |
| 581 | p_info("Unknown NFP device ID, assuming it is NFP-6xxx arch"); | 583 | p_info("Unknown NFP device ID, assuming it is NFP-6xxx arch"); |
| 584 | *opt = "ctx4"; | ||
| 582 | return "NFP-6xxx"; | 585 | return "NFP-6xxx"; |
| 583 | default: | 586 | default: |
| 584 | p_err("Can't get bfd arch name for device vendor id 0x%04x", | 587 | p_err("Can't get bfd arch name for device vendor id 0x%04x", |
diff --git a/tools/bpf/bpftool/jit_disasm.c b/tools/bpf/bpftool/jit_disasm.c index 87439320ef70..c75ffd9ce2bb 100644 --- a/tools/bpf/bpftool/jit_disasm.c +++ b/tools/bpf/bpftool/jit_disasm.c | |||
| @@ -77,7 +77,7 @@ static int fprintf_json(void *out, const char *fmt, ...) | |||
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes, | 79 | void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes, |
| 80 | const char *arch) | 80 | const char *arch, const char *disassembler_options) |
| 81 | { | 81 | { |
| 82 | disassembler_ftype disassemble; | 82 | disassembler_ftype disassemble; |
| 83 | struct disassemble_info info; | 83 | struct disassemble_info info; |
| @@ -116,6 +116,8 @@ void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes, | |||
| 116 | 116 | ||
| 117 | info.arch = bfd_get_arch(bfdf); | 117 | info.arch = bfd_get_arch(bfdf); |
| 118 | info.mach = bfd_get_mach(bfdf); | 118 | info.mach = bfd_get_mach(bfdf); |
| 119 | if (disassembler_options) | ||
| 120 | info.disassembler_options = disassembler_options; | ||
| 119 | info.buffer = image; | 121 | info.buffer = image; |
| 120 | info.buffer_length = len; | 122 | info.buffer_length = len; |
| 121 | 123 | ||
diff --git a/tools/bpf/bpftool/main.h b/tools/bpf/bpftool/main.h index 28ee769bd11b..28322ace2856 100644 --- a/tools/bpf/bpftool/main.h +++ b/tools/bpf/bpftool/main.h | |||
| @@ -145,13 +145,15 @@ int map_parse_fd(int *argc, char ***argv); | |||
| 145 | int map_parse_fd_and_info(int *argc, char ***argv, void *info, __u32 *info_len); | 145 | int map_parse_fd_and_info(int *argc, char ***argv, void *info, __u32 *info_len); |
| 146 | 146 | ||
| 147 | void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes, | 147 | void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes, |
| 148 | const char *arch); | 148 | const char *arch, const char *disassembler_options); |
| 149 | void print_data_json(uint8_t *data, size_t len); | 149 | void print_data_json(uint8_t *data, size_t len); |
| 150 | void print_hex_data_json(uint8_t *data, size_t len); | 150 | void print_hex_data_json(uint8_t *data, size_t len); |
| 151 | 151 | ||
| 152 | unsigned int get_page_size(void); | 152 | unsigned int get_page_size(void); |
| 153 | unsigned int get_possible_cpus(void); | 153 | unsigned int get_possible_cpus(void); |
| 154 | const char *ifindex_to_bfd_name_ns(__u32 ifindex, __u64 ns_dev, __u64 ns_ino); | 154 | const char * |
| 155 | ifindex_to_bfd_params(__u32 ifindex, __u64 ns_dev, __u64 ns_ino, | ||
| 156 | const char **opt); | ||
| 155 | 157 | ||
| 156 | struct btf_dumper { | 158 | struct btf_dumper { |
| 157 | const struct btf *btf; | 159 | const struct btf *btf; |
diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c index 335028968dfb..5302ee282409 100644 --- a/tools/bpf/bpftool/prog.c +++ b/tools/bpf/bpftool/prog.c | |||
| @@ -449,6 +449,7 @@ static int do_dump(int argc, char **argv) | |||
| 449 | unsigned long *func_ksyms = NULL; | 449 | unsigned long *func_ksyms = NULL; |
| 450 | struct bpf_prog_info info = {}; | 450 | struct bpf_prog_info info = {}; |
| 451 | unsigned int *func_lens = NULL; | 451 | unsigned int *func_lens = NULL; |
| 452 | const char *disasm_opt = NULL; | ||
| 452 | unsigned int nr_func_ksyms; | 453 | unsigned int nr_func_ksyms; |
| 453 | unsigned int nr_func_lens; | 454 | unsigned int nr_func_lens; |
| 454 | struct dump_data dd = {}; | 455 | struct dump_data dd = {}; |
| @@ -607,9 +608,10 @@ static int do_dump(int argc, char **argv) | |||
| 607 | const char *name = NULL; | 608 | const char *name = NULL; |
| 608 | 609 | ||
| 609 | if (info.ifindex) { | 610 | if (info.ifindex) { |
| 610 | name = ifindex_to_bfd_name_ns(info.ifindex, | 611 | name = ifindex_to_bfd_params(info.ifindex, |
| 611 | info.netns_dev, | 612 | info.netns_dev, |
| 612 | info.netns_ino); | 613 | info.netns_ino, |
| 614 | &disasm_opt); | ||
| 613 | if (!name) | 615 | if (!name) |
| 614 | goto err_free; | 616 | goto err_free; |
| 615 | } | 617 | } |
| @@ -651,7 +653,8 @@ static int do_dump(int argc, char **argv) | |||
| 651 | printf("%s:\n", sym_name); | 653 | printf("%s:\n", sym_name); |
| 652 | } | 654 | } |
| 653 | 655 | ||
| 654 | disasm_print_insn(img, lens[i], opcodes, name); | 656 | disasm_print_insn(img, lens[i], opcodes, name, |
| 657 | disasm_opt); | ||
| 655 | img += lens[i]; | 658 | img += lens[i]; |
| 656 | 659 | ||
| 657 | if (json_output) | 660 | if (json_output) |
| @@ -663,7 +666,8 @@ static int do_dump(int argc, char **argv) | |||
| 663 | if (json_output) | 666 | if (json_output) |
| 664 | jsonw_end_array(json_wtr); | 667 | jsonw_end_array(json_wtr); |
| 665 | } else { | 668 | } else { |
| 666 | disasm_print_insn(buf, *member_len, opcodes, name); | 669 | disasm_print_insn(buf, *member_len, opcodes, name, |
| 670 | disasm_opt); | ||
| 667 | } | 671 | } |
| 668 | } else if (visual) { | 672 | } else if (visual) { |
| 669 | if (json_output) | 673 | if (json_output) |
