• Daniel Müller's avatar
    bpf, libbpf: Add type match support · ec6209c8
    Daniel Müller authored
    This patch adds support for the proposed type match relation to
    relo_core where it is shared between userspace and kernel. It plumbs
    through both kernel-side and libbpf-side support.
    
    The matching relation is defined as follows (copy from source):
    - modifiers and typedefs are stripped (and, hence, effectively ignored)
    - generally speaking types need to be of same kind (struct vs. struct, union
      vs. union, etc.)
      - exceptions are struct/union behind a pointer which could also match a
        forward declaration of a struct or union, respectively, and enum vs.
        enum64 (see below)
    Then, depending on type:
    - integers:
      - match if size and signedness match
    - arrays & pointers:
      - target types are recursively matched
    - structs & unions:
      - local members need to exist in target with the same name
      - for each member we recursively check match unless it is already behind a
        pointer, in which case we only check matching names and compatible kind
    - enums:
      - local variants have to have a match in target by symbolic name (but not
        numeric value)
      - size has to match (but enum may match enum64 and vice versa)
    - function pointers:
      - number and position of arguments in local type has to match target
      - for each argument and the return value we recursively check match
    Signed-off-by: default avatarDaniel Müller <deso@posteo.net>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220628160127.607834-5-deso@posteo.net
    ec6209c8
libbpf.c 319 KB