Re: [RFC PATCH v4 1/7] libbpf: Extract BTF type remapping logic into helper function

From: Eduard Zingerman

Date: Tue Nov 04 2025 - 18:16:32 EST


On Tue, 2025-11-04 at 21:40 +0800, Donglin Peng wrote:
> From: pengdonglin <pengdonglin@xxxxxxxxxx>
>
> Refactor btf_dedup_remap_types() by extracting its core logic into a new
> btf_remap_types() helper function. This eliminates code duplication
> and improves modularity while maintaining the same functionality.
>
> The new function encapsulates iteration over BTF types and BTF ext
> sections, accepting a callback for flexible type ID remapping. This
> makes the type remapping logic more maintainable and reusable.
>
> Cc: Eduard Zingerman <eddyz87@xxxxxxxxx>
> Cc: Alexei Starovoitov <ast@xxxxxxxxxx>
> Cc: Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx>
> Cc: Alan Maguire <alan.maguire@xxxxxxxxxx>
> Cc: Song Liu <song@xxxxxxxxxx>
> Signed-off-by: pengdonglin <pengdonglin@xxxxxxxxxx>
> Signed-off-by: Donglin Peng <dolinux.peng@xxxxxxxxx>
> ---

Reviewed-by: Eduard Zingerman <eddyz87@xxxxxxxxx>

> tools/lib/bpf/btf.c | 63 +++++++++++++++++----------------
> tools/lib/bpf/libbpf_internal.h | 1 +
> 2 files changed, 33 insertions(+), 31 deletions(-)
>
> diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c
> index 18907f0fcf9f..5e1c09b5dce8 100644
> --- a/tools/lib/bpf/btf.c
> +++ b/tools/lib/bpf/btf.c
> @@ -3400,6 +3400,37 @@ int btf_ext__set_endianness(struct btf_ext *btf_ext, enum btf_endianness endian)
> return 0;
> }
>
> +static int btf_remap_types(struct btf *btf, struct btf_ext *btf_ext,
> + btf_remap_type_fn visit, void *ctx)
^^^^^^^^^^^^^^^^^
Nit: there is already 'type_id_visit_fn', no need to add new type.

> +{
> + int i, r;
> +
> + for (i = 0; i < btf->nr_types; i++) {
> + struct btf_type *t = btf_type_by_id(btf, btf->start_id + i);
> + struct btf_field_iter it;
> + __u32 *type_id;
> +
> + r = btf_field_iter_init(&it, t, BTF_FIELD_ITER_IDS);
> + if (r)
> + return r;
> +
> + while ((type_id = btf_field_iter_next(&it))) {
> + r = visit(type_id, ctx);
> + if (r)
> + return r;
> + }
> + }
> +
> + if (!btf_ext)
> + return 0;
> +
> + r = btf_ext_visit_type_ids(btf_ext, visit, ctx);
> + if (r)
> + return r;
> +
> + return 0;
> +}
> +
> struct btf_dedup;
>
> static struct btf_dedup *btf_dedup_new(struct btf *btf, const struct btf_dedup_opts *opts);

[...]