[PATCH dwarves 0/3] dwarves: improve BTF encoder comparison method

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Currently when looking for function prototype mismatches with a view
to excluding inconsistent functions, we fall back to a comparison
between parameter names when the name and number of parameters match.
This is brittle, as it is sometimes the case that a function has
multiple type-identical definitions which use different parameters.

Here the existing dwarves_fprintf functionality is re-used to instead
create a string representation of the function prototype - minus the
parameter names - to support a less brittle comparison method.

To support this, patch 1 generalizes function prototype print to
take a conf_fprintf parameter; this allows us to customize the
parameters we use in prototype string generation.

Patch 2 supports generating prototypes without modifiers such
as const as they can lead to false positive prototype mismatches;
see the patch for details.

Finally patch 3 replaces the logic used to compare parameter
names with the prototype string comparison instead.

Using verbose pahole output we can see some of the rejected
comparisons.  73 comparisons are rejected via prototype
comparison, 63 of which are non "."-suffixed functions.  For
example:

function mismatch for 'name_show'('name_show'): 'ssize_t ()(struct kobject *, struct kobj_attribute *, char *)' != 'ssize_t ()(struct device *, struct device_attribute *, char *)'

With these changes, the syscalls defined in sys_ni.c
that Jiri mentioned were missing [1] are present in BTF:

[43071] FUNC '__ia32_compat_sys_io_setup' type_id=42335 linkage=static
[43295] FUNC '__ia32_sys_io_setup' type_id=42335 linkage=static
[47536] FUNC '__x64_sys_io_setup' type_id=42335 linkage=static

[43290] FUNC '__ia32_sys_io_destroy' type_id=42335 linkage=static
[47531] FUNC '__x64_sys_io_destroy' type_id=42335 linkage=static

[43072] FUNC '__ia32_compat_sys_io_submit' type_id=42335 linkage=static
[43296] FUNC '__ia32_sys_io_submit' type_id=42335 linkage=static
[47537] FUNC '__x64_sys_io_submit' type_id=42335 linkage=static

[1] https://lore.kernel.org/bpf/ZAsBYpsBV0wvkhh0@krava/

Alan Maguire (3):
  dwarves_fprintf: generalize function prototype print to support
    passing conf
  dwarves_fprintf: support skipping modifier
  btf_encoder: compare functions via prototypes not parameter names

 btf_encoder.c     | 67 +++++++++++++++++++++++++------------------------------
 dwarves.h         |  6 +++++
 dwarves_fprintf.c | 48 ++++++++++++++++++++++++++-------------
 3 files changed, 70 insertions(+), 51 deletions(-)

-- 
1.8.3.1




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux