On 19/07/2024 20:13, Arnaldo Carvalho de Melo wrote:
> Adding Alan and Jiri to the CC list.
>

I'm late chiming in on this one, but judging by the output:

  BTF     .btf.vmlinux.bin.o
+ LLVM_OBJCOPY=powerpc-linux-gnu-objcopy pahole -J -j
--btf_features=encode_force,var,float,enum64,decl_tag,type_tag,optimized_func,consistent_func
--lang_exclude=rust .tmp_vmlinux.btf
[102044] ARRAY (anon) type_id=99491 index_type_id=14 nr_elems=12 Error
emitting BTF type
Encountered error while encoding BTF.


...we hit an error in btf_encoder__add_array() as a result of
btf__add_array() failing:

btf__log_err(btf, BTF_KIND_ARRAY, NULL, true,
                              "type_id=%u index_type_id=%u nr_elems=%u
Error emitting BTF type",
                              type, index_type, nelems);


Unfortunately we don't preserve the negative id value (containing the
error code) in btf__log_err(); I'm thinking one thing we should do is
modify btf__log_err() to preserves errors for cases where the encoding
errors out due to a libbpf-returned -errno, something like


-__attribute ((format (printf, 5, 6)))
+__attribute ((format (printf, 6, 7)))
-static void btf__log_err(const struct btf *btf, int kind, const char *name,
+static void btf__log_err(const struct btf *btf, int libbpf_err, int
kind, const char *name,
                         bool output_cr, const char *fmt, ...)
{
        fprintf(stderr, "[%u] %s %s", btf__type_cnt(btf),
                btf_kind_str[kind], name ?: "(anon)");

        if (fmt && *fmt) {
                va_list ap;

                fprintf(stderr, " ");
                va_start(ap, fmt);
                vfprintf(stderr, fmt, ap);
                va_end(ap);
        }

+       if (libbpf_err)
+               fprintf(stderr, " libbpf error %d", libbpf_err);
        if (output_cr)
                fprintf(stderr, "\n");
}


So at least if this error recurs we'd have a clearer picture of what's
happening in libbpf. What do you think? I'll submit a patch for this if
it makes sense.

Alan

Reply via email to