diff options
Diffstat (limited to 'tools/bpf/bpftool/jit_disasm.c')
-rw-r--r-- | tools/bpf/bpftool/jit_disasm.c | 23 |
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 | ||
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 | { | 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) |