On Tue, Feb 21, 2023 at 03:48:39PM +0000, Alan Maguire wrote: > 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 I'm getting more functions in with this patchset 1666 for gcc (with 61678, without 60012) 9390 for clang (with 62128, without 52738) but no duplicates and selftests are passing Tested-by: Jiri Olsa <jolsa@xxxxxxxxxx> jirka > > dwarf_loader.c | 30 ++++++++++++++++++------------ > 1 file changed, 18 insertions(+), 12 deletions(-) > > -- > 2.31.1 >