On Thu, Mar 18, 2021 at 12:42 PM Andrii Nakryiko <andrii@xxxxxxxxxx> wrote: > > This patch set adds new libbpf APIs and their bpftool integration that allows > to perform static linking of BPF object files. Currently no extern resolution > across object files is performed. This is going to be the focus of the follow > up patches. But, given amount of code and logic necessary to perform just > basic functionality of linking together mostly independent BPF object files, > it was decided to land basic BPF linker code and logic first and extend it > afterwards. > > The motivation for BPF static linking is to provide the functionality that is > naturally assumed for user-space development process: ability to structure > application's code without artificial restrictions of having all the code and > data (variables and maps) inside a single source code file. > > This enables better engineering practices of splitting code into > well-encapsulated parts. It provides ability to hide internal state from other > parts of the code base through static variables and maps. It is also a first > steps towards having generic reusable BPF libraries. > > Please see individual patches (mostly #6 and #7) for more details. Patch #10 > passes all test_progs' individual BPF .o files through BPF static linker, > which is supposed to be a no-op operation, so is essentially validating that > BPF static linker doesn't produce corrupted ELF object files. Patch #11 adds > Makefile infra to be able to specify multi-file BPF object files and adds the > first multi-file test to validate correctness. > > v3->v4: > - fix Makefile copy/paste error of diff'ing invalid object files (Alexei); > - fix uninitialized obj_name variable that could lead to bogus object names > being used during skeleton generation (kernel-patches CI); Applied.