mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-03 00:54:09 +08:00
e306e2c13b
This is a minimal stand-alone user space helper, that allows for debugging or verification of emitted BPF JIT images. This is in particular useful for emitted opcode debugging, since minor bugs in the JIT compiler can be fatal. The disassembler is architecture generic and uses libopcodes and libbfd. How to get to the disassembly, example: 1) `echo 2 > /proc/sys/net/core/bpf_jit_enable` 2) Load a BPF filter (e.g. `tcpdump -p -n -s 0 -i eth1 host 192.168.20.0/24`) 3) Run e.g. `bpf_jit_disasm -o` to disassemble the most recent JIT code output `bpf_jit_disasm -o` will display the related opcodes to a particular instruction as well. Example for x86_64: $ ./bpf_jit_disasm 94 bytes emitted from JIT compiler (pass:3, flen:9) ffffffffa0356000 + <x>: 0: push %rbp 1: mov %rsp,%rbp 4: sub $0x60,%rsp 8: mov %rbx,-0x8(%rbp) c: mov 0x68(%rdi),%r9d 10: sub 0x6c(%rdi),%r9d 14: mov 0xe0(%rdi),%r8 1b: mov $0xc,%esi 20: callq 0xffffffffe0d01b71 25: cmp $0x86dd,%eax 2a: jne 0x000000000000003d 2c: mov $0x14,%esi 31: callq 0xffffffffe0d01b8d 36: cmp $0x6,%eax [...] 5c: leaveq 5d: retq $ ./bpf_jit_disasm -o 94 bytes emitted from JIT compiler (pass:3, flen:9) ffffffffa0356000 + <x>: 0: push %rbp 55 1: mov %rsp,%rbp 48 89 e5 4: sub $0x60,%rsp 48 83 ec 60 8: mov %rbx,-0x8(%rbp) 48 89 5d f8 c: mov 0x68(%rdi),%r9d 44 8b 4f 68 10: sub 0x6c(%rdi),%r9d 44 2b 4f 6c [...] 5c: leaveq c9 5d: retq c3 Signed-off-by: Daniel Borkmann <dborkman@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
80 lines
2.5 KiB
Makefile
80 lines
2.5 KiB
Makefile
include scripts/Makefile.include
|
|
|
|
help:
|
|
@echo 'Possible targets:'
|
|
@echo ''
|
|
@echo ' cgroup - cgroup tools'
|
|
@echo ' cpupower - a tool for all things x86 CPU power'
|
|
@echo ' firewire - the userspace part of nosy, an IEEE-1394 traffic sniffer'
|
|
@echo ' lguest - a minimal 32-bit x86 hypervisor'
|
|
@echo ' perf - Linux performance measurement and analysis tool'
|
|
@echo ' selftests - various kernel selftests'
|
|
@echo ' turbostat - Intel CPU idle stats and freq reporting tool'
|
|
@echo ' usb - USB testing tools'
|
|
@echo ' virtio - vhost test module'
|
|
@echo ' net - misc networking tools'
|
|
@echo ' vm - misc vm tools'
|
|
@echo ' x86_energy_perf_policy - Intel energy policy tool'
|
|
@echo ''
|
|
@echo 'You can do:'
|
|
@echo ' $$ make -C tools/ <tool>_install'
|
|
@echo ''
|
|
@echo ' from the kernel command line to build and install one of'
|
|
@echo ' the tools above'
|
|
@echo ''
|
|
@echo ' $$ make tools/install'
|
|
@echo ''
|
|
@echo ' installs all tools.'
|
|
@echo ''
|
|
@echo 'Cleaning targets:'
|
|
@echo ''
|
|
@echo ' all of the above with the "_clean" string appended cleans'
|
|
@echo ' the respective build directory.'
|
|
@echo ' clean: a summary clean target to clean _all_ folders'
|
|
|
|
cpupower: FORCE
|
|
$(call descend,power/$@)
|
|
|
|
cgroup firewire lguest perf usb virtio vm net: FORCE
|
|
$(call descend,$@)
|
|
|
|
selftests: FORCE
|
|
$(call descend,testing/$@)
|
|
|
|
turbostat x86_energy_perf_policy: FORCE
|
|
$(call descend,power/x86/$@)
|
|
|
|
cpupower_install:
|
|
$(call descend,power/$(@:_install=),install)
|
|
|
|
cgroup_install firewire_install lguest_install perf_install usb_install virtio_install vm_install net_install:
|
|
$(call descend,$(@:_install=),install)
|
|
|
|
selftests_install:
|
|
$(call descend,testing/$(@:_clean=),install)
|
|
|
|
turbostat_install x86_energy_perf_policy_install:
|
|
$(call descend,power/x86/$(@:_install=),install)
|
|
|
|
install: cgroup_install cpupower_install firewire_install lguest_install \
|
|
perf_install selftests_install turbostat_install usb_install \
|
|
virtio_install vm_install net_install x86_energy_perf_policy_install
|
|
|
|
cpupower_clean:
|
|
$(call descend,power/cpupower,clean)
|
|
|
|
cgroup_clean firewire_clean lguest_clean perf_clean usb_clean virtio_clean vm_clean net_clean:
|
|
$(call descend,$(@:_clean=),clean)
|
|
|
|
selftests_clean:
|
|
$(call descend,testing/$(@:_clean=),clean)
|
|
|
|
turbostat_clean x86_energy_perf_policy_clean:
|
|
$(call descend,power/x86/$(@:_clean=),clean)
|
|
|
|
clean: cgroup_clean cpupower_clean firewire_clean lguest_clean perf_clean \
|
|
selftests_clean turbostat_clean usb_clean virtio_clean \
|
|
vm_clean net_clean x86_energy_perf_policy_clean
|
|
|
|
.PHONY: FORCE
|