On Wed, Aug 7, 2019 at 1:01 PM Alexei Starovoitov <ast@xxxxxx> wrote: > > On 8/7/19 12:59 PM, Andrii Nakryiko wrote: > > On Wed, Aug 7, 2019 at 12:30 PM Alexei Starovoitov > > <alexei.starovoitov@xxxxxxxxx> wrote: > >> > >> On Tue, Aug 06, 2019 at 10:37:54PM -0700, Andrii Nakryiko wrote: > >>> Simplify code by relying on newly added BTF helper functions. > >>> > >>> Signed-off-by: Andrii Nakryiko <andriin@xxxxxx> > >> .. > >>> > >>> - for (i = 0, vsi = (struct btf_var_secinfo *)(t + 1); > >>> - i < vars; i++, vsi++) { > >>> + for (i = 0, vsi = (void *)btf_var_secinfos(t); i < vars; i++, vsi++) { > >> > >>> + struct btf_member *m = (void *)btf_members(t); > >> ... > >>> case BTF_KIND_ENUM: { > >>> - struct btf_enum *m = (struct btf_enum *)(t + 1); > >>> - __u16 vlen = BTF_INFO_VLEN(t->info); > >>> + struct btf_enum *m = (void *)btf_enum(t); > >>> + __u16 vlen = btf_vlen(t); > >> ... > >>> case BTF_KIND_FUNC_PROTO: { > >>> - struct btf_param *m = (struct btf_param *)(t + 1); > >>> - __u16 vlen = BTF_INFO_VLEN(t->info); > >>> + struct btf_param *m = (void *)btf_params(t); > >>> + __u16 vlen = btf_vlen(t); > >> > >> So all of these 'void *' type hacks are only to drop const-ness ? > > > > Yes. > > > >> May be the helpers shouldn't be taking const then? > >> > > > > Probably not, because then we'll have much wider-spread problem of > > casting const pointers into non-const when passing btf_type into > > helpers. > > I think const as a default is the right choice, because normally BTF > > is immutable and btf__type_by_id is returning const pointer, etc. > > That's typical and expected use-case. btf_dedup and BTF sanitization + > > datasec size setting pieces are an exception that have to modify BTF > > types in place before passing it to user. > > > > So realistically I think we can just leave it as (void *), or I can do > > explicit non-const type casts, or we can just not use helpers for > > mutable cases. Do you have a preference? > > Hmm. Take a const into the helper and drop it there? > I'd like to avoid all these 'void *'. Well, I guess it's a way to do this as well. Given it's C, I guess it's acceptable to be so free about constness. I'll update patches.