[PATCH] D119799: [BPF] Fix a bug in BTF_KIND_TYPE_TAG generation

Yonghong Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 14 17:59:18 PST 2022


yonghong-song created this revision.
yonghong-song added reviewers: ast, anakryiko.
Herald added a subscriber: hiraditya.
yonghong-song requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Kumar Kartikeya Dwivedi reported a bug ([1]) where BTF_KIND_TYPE_TAG types
are not generated.

Currently, BPF backend only generates BTF types which are used by
the program, e.g., global variables, functions and some builtin functions.
For example, suppose we have

  struct task_struct {                  
    ... 
    struct task_group               *sched_task_group;
    struct mm_struct                *mm;
    ...
    pid_t                           pid;
    pid_t                           tgid;
    ...
  }

If BPF program intends to access task_struct->pid and task_struct->tgid,
there really no need to generate BTF types for struct task_group
and mm_struct.

In BPF backend, during BTF generation, when generating BTF for struct
task_struct, if types for task_group and mm_struct have not been generated
yet, a Fixup structure will be created, which will be reexamined later
to instantiate into either a full type or a forward type.

In current implementation, if we have something like

  struct foo {
     struct bar  __tag1    *f;
  };  

and when generating types for struct foo, struct bar type
has not been generated, the __tag1 will be lost during later
Fixup instantiation. This patch fixed this issue by properly
handling btf_type_tag's during Fixup instantiation stage.

  [1] https://lore.kernel.org/bpf/20220210232411.pmhzj7v5uptqby7r@apollo.legion/


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D119799

Files:
  llvm/lib/Target/BPF/BTFDebug.cpp
  llvm/lib/Target/BPF/BTFDebug.h
  llvm/test/CodeGen/BPF/BTF/type-tag-fixup-fwd.ll
  llvm/test/CodeGen/BPF/BTF/type-tag-fixup-resolved.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D119799.408676.patch
Type: text/x-patch
Size: 22324 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220215/7afa975e/attachment.bin>


More information about the llvm-commits mailing list