Re: [PATCH bpf-next 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Jul 25, 2021 at 7:18 AM Hengqi Chen <hengqi.chen@xxxxxxxxx> wrote:
>
> Kernel functions referenced by .BTF_ids may changed from global to static
> and get inlined and thus disappears from BTF. This causes kernel build
> failure when resolve_btfids do id patch for symbols in .BTF_ids in vmlinux.
> Update resolve_btfids to emit warning messages and patch zero id for missing
> symbols instead of aborting kernel build process.
>
> Signed-off-by: Hengqi Chen <hengqi.chen@xxxxxxxxx>
> ---
>  tools/bpf/resolve_btfids/main.c | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c
> index 3ad9301b0f00..3ea19e33250d 100644
> --- a/tools/bpf/resolve_btfids/main.c
> +++ b/tools/bpf/resolve_btfids/main.c
> @@ -291,7 +291,7 @@ static int compressed_section_fix(Elf *elf, Elf_Scn *scn, GElf_Shdr *sh)
>         sh->sh_addralign = expected;
>
>         if (gelf_update_shdr(scn, sh) == 0) {
> -               printf("FAILED cannot update section header: %s\n",
> +               pr_err("FAILED cannot update section header: %s\n",
>                         elf_errmsg(-1));
>                 return -1;
>         }
> @@ -317,6 +317,7 @@ static int elf_collect(struct object *obj)
>
>         elf = elf_begin(fd, ELF_C_RDWR_MMAP, NULL);
>         if (!elf) {
> +               close(fd);
>                 pr_err("FAILED cannot create ELF descriptor: %s\n",
>                         elf_errmsg(-1));
>                 return -1;
> @@ -484,7 +485,7 @@ static int symbols_resolve(struct object *obj)
>         err = libbpf_get_error(btf);
>         if (err) {
>                 pr_err("FAILED: load BTF from %s: %s\n",
> -                       obj->path, strerror(-err));
> +                       obj->btf ?: obj->path, strerror(-err));
>                 return -1;
>         }
>
> @@ -555,8 +556,7 @@ static int id_patch(struct object *obj, struct btf_id *id)
>         int i;
>
>         if (!id->id) {
> -               pr_err("FAILED unresolved symbol %s\n", id->name);
> -               return -EINVAL;
> +               pr_err("WARN: unresolved symbol %s\n", id->name);

we should probably give a bit more information for people to get back
to us for this. For starters, maybe prefix the message with
"resolve_btfids:" so that people at least can grep something relevant?

>         }
>
>         for (i = 0; i < id->addr_cnt; i++) {
> @@ -734,8 +734,9 @@ int main(int argc, const char **argv)
>
>         err = 0;
>  out:
> -       if (obj.efile.elf)
> +       if (obj.efile.elf) {
>                 elf_end(obj.efile.elf);
> -       close(obj.efile.fd);
> +               close(obj.efile.fd);
> +       }
>         return err;
>  }
> --
> 2.25.1



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux