[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20181214233425.2667487-1-yhs@fb.com>
Date: Fri, 14 Dec 2018 15:34:25 -0800
From: Yonghong Song <yhs@...com>
To: <netdev@...r.kernel.org>
CC: Alexei Starovoitov <ast@...com>,
Daniel Borkmann <daniel@...earbox.net>, <kernel-team@...com>,
Martin KaFai Lau <kafai@...com>
Subject: [PATCH bpf-next v2 0/8] bpf: btf: fix struct/union/fwd types with kind_flag
Commit 69b693f0aefa ("bpf: btf: Introduce BPF Type Format (BTF)")
introduced BTF, a debug info format for BTF.
The original design has a couple of issues though.
First, the bitfield size is only encoded in int type.
If the struct member bitfield type is enum, pahole ([1])
or llvm is forced to replace enum with int type. As a result, the original
type information gets lost.
Second, the original BTF design does not envision the possibility of
BTF=>header_file conversion ([2]), hence does not encode "struct" or
"union" info for a forward type. Such information is necessary to
convert BTF to a header file.
This patch set fixed the issue by introducing kind_flag, using one bit
in type->info. When kind_flag, the struct/union btf_member->offset
will encode both bitfield_size and bit_offset, covering both
int and enum base types. The kind_flag is also used to indicate whether
the forward type is a union (when set) or a struct.
Patch #1 refactors function btf_int_bits_seq_show() so Patch #2
can reuse part of the function.
Patch #2 implemented kind_flag support for struct/union/fwd types.
Patch #3 added kind_flag support for cgroup local storage map pretty print.
Patch #4 syncs kernel uapi btf.h to tools directory.
Patch #5 added unit tests for kind_flag.
Patch #6 added tests for kernel bpffs based pretty print with kind_flag.
Patch #7 refactors function btf_dumper_int_bits() so Patch #8
can reuse part of the function.
Patch #8 added bpftool support of pretty print with kind_flag set.
[1] https://git.kernel.org/pub/scm/devel/pahole/pahole.git/commit/?id=b18354f64cc215368c3bc0df4a7e5341c55c378c
[2] https://lwn.net/SubscriberLink/773198/fe3074838f5c3f26/
Change logs:
v1 -> v2:
. If kind_flag is set for a structure, ensure an int member,
whether it is a bitfield or not, is a regular int type.
. Added support so cgroup local storage map pretty print
works with kind_flag.
Yonghong Song (8):
bpf: btf: refactor btf_int_bits_seq_show()
bpf: btf: fix struct/union/fwd types with kind_flag
bpf: enable cgroup local storage map pretty print with kind_flag
tools/bpf: sync btf.h header from kernel to tools
tools/bpf: add test_btf unit tests for kind_flag
tools/bpf: test kernel bpffs map pretty print with struct kind_flag
tools: bpftool: refactor btf_dumper_int_bits()
tools: bpftool: support pretty print with kind_flag set
include/linux/btf.h | 5 +-
include/uapi/linux/btf.h | 15 +-
kernel/bpf/btf.c | 346 ++++++++++++--
kernel/bpf/local_storage.c | 17 +-
tools/bpf/bpftool/btf_dumper.c | 58 ++-
tools/include/uapi/linux/btf.h | 15 +-
tools/testing/selftests/bpf/test_btf.c | 618 ++++++++++++++++++++++++-
7 files changed, 982 insertions(+), 92 deletions(-)
--
2.17.1
Powered by blists - more mailing lists