On 12/23/19 10:03 AM, Andrii Nakryiko wrote: > Clang patch [0] enables emitting relocatable generic ALU/ALU64 instructions > (i.e, shifts and arithmetic operations), as well as generic load/store > instructions. The former ones are already supported by libbpf as is. This > patch adds further support for load/store instructions. Relocatable field > offset is encoded in BPF instruction's 16-bit offset section and are adjusted > by libbpf based on target kernel BTF. > > These Clang changes and corresponding libbpf changes allow for more succinct > generated BPF code by encoding relocatable field reads as a single > ST/LDX/STX instruction. It also enables relocatable access to BPF context. > Previously, if context struct (e.g., __sk_buff) was accessed with CO-RE > relocations (e.g., due to preserve_access_index attribute), it would be > rejected by BPF verifier due to modified context pointer dereference. With > Clang patch, such context accesses are both relocatable and have a fixed > offset from the point of view of BPF verifier. > > [0] https://reviews.llvm.org/D71790 > > Signed-off-by: Andrii Nakryiko <andriin@xxxxxx> Acked-by: Yonghong Song <yhs@xxxxxx>