aboutsummaryrefslogtreecommitdiffstats
path: root/tools/bpf/bpftool/jit_disasm.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/bpf/bpftool/jit_disasm.c')
-rw-r--r--tools/bpf/bpftool/jit_disasm.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/tools/bpf/bpftool/jit_disasm.c b/tools/bpf/bpftool/jit_disasm.c
index 1551d3918d4c..87439320ef70 100644
--- a/tools/bpf/bpftool/jit_disasm.c
+++ b/tools/bpf/bpftool/jit_disasm.c
@@ -76,7 +76,8 @@ static int fprintf_json(void *out, const char *fmt, ...)
76 return 0; 76 return 0;
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{ 81{
81 disassembler_ftype disassemble; 82 disassembler_ftype disassemble;
82 struct disassemble_info info; 83 struct disassemble_info info;
@@ -100,6 +101,19 @@ void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes)
100 else 101 else
101 init_disassemble_info(&info, stdout, 102 init_disassemble_info(&info, stdout,
102 (fprintf_ftype) fprintf); 103 (fprintf_ftype) fprintf);
104
105 /* Update architecture info for offload. */
106 if (arch) {
107 const bfd_arch_info_type *inf = bfd_scan_arch(arch);
108
109 if (inf) {
110 bfdf->arch_info = inf;
111 } else {
112 p_err("No libfd support for %s", arch);
113 return;
114 }
115 }
116
103 info.arch = bfd_get_arch(bfdf); 117 info.arch = bfd_get_arch(bfdf);
104 info.mach = bfd_get_mach(bfdf); 118 info.mach = bfd_get_mach(bfdf);
105 info.buffer = image; 119 info.buffer = image;
@@ -107,7 +121,14 @@ void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes)
107 121
108 disassemble_init_for_target(&info); 122 disassemble_init_for_target(&info);
109 123
124#ifdef DISASM_FOUR_ARGS_SIGNATURE
125 disassemble = disassembler(info.arch,
126 bfd_big_endian(bfdf),
127 info.mach,
128 bfdf);
129#else
110 disassemble = disassembler(bfdf); 130 disassemble = disassembler(bfdf);
131#endif
111 assert(disassemble); 132 assert(disassemble);
112 133
113 if (json_output) 134 if (json_output)