As discussed in [1], there are a few issues with how we determine whether to skip functions for BTF encoding: - when detecting unexpected registers, functions which have struct parameters need to be skipped as they can use multiple registers to pass the struct, and as a result later parameters use unexpected registers. However, struct detection does not always work; it needs to be fixed for const struct parameters and cases where a parameter references the original parameter (which has the type info) via abstract origin (patch 1) - when looking for unexpected registers, location lists are not supported. Fix that by using dwarf_getlocations() (patch 2). - when marking parameters as using unexpected registers, we should stick to the case where we expect register x and register y is used; other cases such as optimized-out parameters are no guarantee that we were not _passed_ the correct parameters (patch 3). This series can be applied on top of the dwarves "next" branch, as a follow-on to [2] [1] https://lore.kernel.org/bpf/20230220190335.bk6jzayfqivsh7rv@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ [2] https://lore.kernel.org/bpf/1676675433-10583-1-git-send-email-alan.maguire@xxxxxxxxxx/ Alan Maguire (3): dwarf_loader: fix detection of struct parameters dwarf_loader: fix parameter location retrieval for location lists dwarf_loader: only mark parameter as using an unexpected register when it does dwarf_loader.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) -- 2.31.1