aboutsummaryrefslogtreecommitdiffstats
path: root/tools/bpf
diff options
context:
space:
mode:
Diffstat (limited to 'tools/bpf')
-rw-r--r--tools/bpf/bpftool/common.c5
-rw-r--r--tools/bpf/bpftool/jit_disasm.c4
-rw-r--r--tools/bpf/bpftool/main.h6
-rw-r--r--tools/bpf/bpftool/prog.c14
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
557const char *ifindex_to_bfd_name_ns(__u32 ifindex, __u64 ns_dev, __u64 ns_ino) 557const char *
558ifindex_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
79void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes, 79void 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);
145int map_parse_fd_and_info(int *argc, char ***argv, void *info, __u32 *info_len); 145int map_parse_fd_and_info(int *argc, char ***argv, void *info, __u32 *info_len);
146 146
147void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes, 147void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes,
148 const char *arch); 148 const char *arch, const char *disassembler_options);
149void print_data_json(uint8_t *data, size_t len); 149void print_data_json(uint8_t *data, size_t len);
150void print_hex_data_json(uint8_t *data, size_t len); 150void print_hex_data_json(uint8_t *data, size_t len);
151 151
152unsigned int get_page_size(void); 152unsigned int get_page_size(void);
153unsigned int get_possible_cpus(void); 153unsigned int get_possible_cpus(void);
154const char *ifindex_to_bfd_name_ns(__u32 ifindex, __u64 ns_dev, __u64 ns_ino); 154const char *
155ifindex_to_bfd_params(__u32 ifindex, __u64 ns_dev, __u64 ns_ino,
156 const char **opt);
155 157
156struct btf_dumper { 158struct 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)