BPF: change btf_type_tag BTF output format
authorYonghong Song <yhs@fb.com>
Mon, 8 Nov 2021 04:36:52 +0000 (20:36 -0800)
committerYonghong Song <yhs@fb.com>
Tue, 9 Nov 2021 19:34:25 +0000 (11:34 -0800)
commit8d499bd5bc1eee4c385b2bda26fc5f415a621207
treef90cfb1a8e14ae15f32c5d9867f2dc7b5dc2efd8
parent791baf38e14bfbaf56f5ec24a33b232a0a58fad6
BPF: change btf_type_tag BTF output format

For the declaration like below:
  int __tag1 * __tag1 __tag2 *g
Commit 41860e602aaa ("BPF: Support btf_type_tag attribute")
implemented the following encoding:
  VAR(g) -> __tag1 --> __tag2 -> pointer -> __tag1 -> pointer -> int

Some further experiments with linux btf_type_tag support, esp.
with generating attributes in vmlinux.h, and also some internal
discussion showed the following format is more desirable:
  VAR(g) -> pointer -> __tag2 -> __tag1 -> pointer -> __tag1 -> int

The format makes it similar to other modifier like 'const', e.g.,
  const int *g
which has encoding VAR(g) -> PTR -> CONST -> int

Differential Revision: https://reviews.llvm.org/D113496
llvm/lib/Target/BPF/BTFDebug.cpp
llvm/lib/Target/BPF/BTFDebug.h
llvm/test/CodeGen/BPF/BTF/type-tag-var.ll