On Wed, 2024-01-03 at 17:38 -0800, Andrii Nakryiko wrote: > Support __arg_ctx global function argument tag semantics even on older kernels > that don't natively support it through btf_decl_tag("arg:ctx"). > > Patches #2-#6 are preparatory work to allow to postpone BTF loading into the > kernel until after all the BPF program relocations (including global func > appending to main programs) are done. Patch #4 is perhaps the most important > and establishes pre-created stable placeholder FDs, so that relocations can > embed valid map FDs into ldimm64 instructions. > > Once BTF is done after relocation, what's left is to adjust BTF information to > have each main program's copy of each used global subprog to point to its own > adjusted FUNC -> FUNC_PROTO type chain (if they use __arg_ctx) in such a way > as to satisfy type expectations of BPF verifier regarding the PTR_TO_CTX > argument definition. See patch #8 for details. > > Patch #8 adds few more __arg_ctx use cases (edge cases like multiple arguments > having __arg_ctx, etc) to test_global_func_ctx_args.c, to make it simple to > validate that this logic indeed works on old kernels. It does. But just to be > 100% sure patch #9 adds a test validating that libbpf uploads func_info with > properly modified BTF data. > > v2->v3: > - drop renaming patch (Alexei, Eduard); > - use memfd_create() instead of /dev/null for placeholder FD (Eduard); > - add one more test for validating BTF rewrite logic (Eduard); > - fixed wrong -errno usage, reshuffled some BTF rewrite bits (Eduard); > v1->v2: > - do internal functions renaming in patch #1 (Alexei); > - extract cloning of FUNC -> FUNC_PROTO information into separate function > (Alexei); Acked-by: Eduard Zingerman <eddyz87@xxxxxxxxx> Thank you for adding the test in patch #9.