Presented by

Abstract

BPF (previously known as eBPF) is a virtual machine running within the Linux kernel; initially intended for user-level packet capture and filtering, BPF has since been generalized to also serve as a general-purpose infrastructure for non-networking purposes. As its use spreads among more and more kernel subsystems, the length and complexity of BPF programs are also increasing. That, combined with the fact that the kernel BPF verifier is getting more and more smart, allowing more sophisticated programs to run in the kernel, results in people wanting to write BPF programs in high-level languages such as C. For many years a LLVM port was the only option for BPF developers who wanted to write C BPF programs. A year ago Oracle undertook the task to add a BPF port to the GNU Toolchain. At the present time we have upstreamed support for BPF to GCC, the binutils (assembler, disassembler, linker) the GDB debugger and the GNU simulator. This is work in progress, and we are currently in the task of adding support for BTF and CO-RE (Compile once, run everywhere.) In this talk we will describe the current status of the port and quickly show how it can be used to do BPF development.