On Tue, Nov 9, 2021 at 10:26 PM Yonghong Song <yhs@xxxxxx> wrote: > > > > On 11/9/21 9:28 PM, Alexei Starovoitov wrote: > > On Tue, Nov 09, 2021 at 09:19:40PM -0800, Yonghong Song wrote: > >> LLVM patches ([1] for clang, [2] and [3] for BPF backend) > >> added support for btf_type_tag attributes. This patch > >> added support for the kernel. > >> > >> The main motivation for btf_type_tag is to bring kernel > >> annotations __user, __rcu etc. to btf. With such information > >> available in btf, bpf verifier can detect mis-usages > >> and reject the program. For example, for __user tagged pointer, > >> developers can then use proper helper like bpf_probe_read_kernel() > >> etc. to read the data. > > > > +#define __tag1 __attribute__((btf_type_tag("tag1"))) > > +#define __tag2 __attribute__((btf_type_tag("tag2"))) > > + > > +struct btf_type_tag_test { > > + int __tag1 * __tag1 __tag2 *p; > > +} g; > > > > Can we build the kernel with the latest clang and get __user in BTF ? > > Not yet. The following are the steps: > 1. land this patch set in the kernel > 2. sync to libbpf repo. > 3. pahole sync with libbpf repo, and pahole convert btf_type_tag > in llvm to BTF > 4. another kernel patch to define __user as > __attribute__((btf_type_tag("user"))) > and then we will get __user in vmlinux BTF. Makes sense. I was wondering whether clang can handle the whole kernel source code with #define __user __attribute__((btf_type_tag("user"))) Steps 1,2,3 are necessary to make use of it, but step 4 can be tried out already?