aboutsummaryrefslogtreecommitdiffstats
path: root/tools/bpf/bpftool/prog.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/bpf/bpftool/prog.c')
-rw-r--r--tools/bpf/bpftool/prog.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c
index 355c14325622..57edbea2fbe8 100644
--- a/tools/bpf/bpftool/prog.c
+++ b/tools/bpf/bpftool/prog.c
@@ -313,20 +313,29 @@ static void print_insn(struct bpf_verifier_env *env, const char *fmt, ...)
313static void dump_xlated(void *buf, unsigned int len, bool opcodes) 313static void dump_xlated(void *buf, unsigned int len, bool opcodes)
314{ 314{
315 struct bpf_insn *insn = buf; 315 struct bpf_insn *insn = buf;
316 bool double_insn = false;
316 unsigned int i; 317 unsigned int i;
317 318
318 for (i = 0; i < len / sizeof(*insn); i++) { 319 for (i = 0; i < len / sizeof(*insn); i++) {
320 if (double_insn) {
321 double_insn = false;
322 continue;
323 }
324
325 double_insn = insn[i].code == (BPF_LD | BPF_IMM | BPF_DW);
326
319 printf("% 4d: ", i); 327 printf("% 4d: ", i);
320 print_bpf_insn(print_insn, NULL, insn + i, true); 328 print_bpf_insn(print_insn, NULL, insn + i, true);
321 329
322 if (opcodes) { 330 if (opcodes) {
323 printf(" "); 331 printf(" ");
324 fprint_hex(stdout, insn + i, 8, " "); 332 fprint_hex(stdout, insn + i, 8, " ");
333 if (double_insn && i < len - 1) {
334 printf(" ");
335 fprint_hex(stdout, insn + i + 1, 8, " ");
336 }
325 printf("\n"); 337 printf("\n");
326 } 338 }
327
328 if (insn[i].code == (BPF_LD | BPF_IMM | BPF_DW))
329 i++;
330 } 339 }
331} 340}
332 341