[PATCH v3 dwarves 0/5] Improve BTF concrete function accuracy
Alan Maguire <[email protected]>
| Newsgroups | org.kernel.vger.dwarves,org.kernel.vger.bpf |
|---|---|
| Message-ID | <[email protected]> |
This series brings together a few solutions to issues we have with accuracy of BTF function representation at the binary level. The first patch detects mismatches between concrete (binary) and abstract (source-level) function signatures as a means of either excluding them or providing a "true" function signature. Patch 2 adds GCC true function signature support for optimized functions; with that support, we use binary-level signatures for .isra.0, .constprop.0 functions and represent them with their "." suffixes as BTF_KIND_FUNC names. This allows for fentry attach to such functions, and the "." suffix is an indicator of signature modification. The feature is guarded by a default-off BTF feature because older kernels did not support a "." in a function name. Patch 3 uses Yonghong's example program as a test; compiling with -O2 we expect a parameter to "foo" to be optimized out and the true function signature should reflect that. Patch 4 documents the non-default "true_signature" feature. Patch 5 is Matt's patch to favour the strong function over the associated weak declaration. The other patches are important prerequisites for this as the patch selects the binary-level function (with a lowpc value), and in the case of optimized functions we were often selecting the .isra function with optimized-out parameters. Because pahole did not previously detect this correctly we ended up with functions with signatures having reordered parameters. Patches 1-2 help avoid this by better detecting optimized-out function parameters. With these patches in place, ~20 functions are omitted from vmlinux BTF; all these are "."-suffixed functions which we were not noticing had optimized-out parameters. Experimenting with adding true_signature to BTF features we end up adding approximately 500 .isra and .constprop functions to vmlinux BTF. The true function signature support here will also hopefully help pave the way for Yonghong's work on the LLVM side. Changes since v2 [1] - updated patch 2 to set state->addr via function__address() and use it (Matt, patch 2) - refactored true signature addition code into separate function (Matt, patch 2) Changes since v1 [2] - dropped Yonghong's patch (Ihor) - fixed up issues Yonghong found in true signature encoding where we did not adjust the number of parameters and were not handling true function signature case correctly when adding saved functions (Yonghong, patch 2) - added test using Yonghong's example (patch 3) [1] https://lore.kernel.org/dwarves/[email protected]/ [2] https://lore.kernel.org/dwarves/[email protected]/ Alan Maguire (4): dwarf_loader/btf_encoder: Detect reordered parameters btf_encoder: Add true_signature feature support for "."-suffixed functions test: add gcc true signature test man-pages: document true_signature btf_feature Matt Bobrowski (1): btf_encoder: Prefer strong function definitions for BTF generation btf_encoder.c | 162 +++++++++++++++++++++++++++++++---- dwarf_loader.c | 5 +- dwarves.h | 3 + man-pages/pahole.1 | 5 ++ pahole.c | 1 + tests/gcc_true_signatures.sh | 92 ++++++++++++++++++++ 6 files changed, 250 insertions(+), 18 deletions(-) create mode 100755 tests/gcc_true_signatures.sh -- 2.43.5