Re: [PATCH v2 bpf-next 07/13] resolve_btfids: use .BTF.base ELF section as base BTF if -B option is used

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

 



On Wed, Apr 24, 2024 at 8:49 AM Alan Maguire <alan.maguire@xxxxxxxxxx> wrote:
>
> When resolving BTF ids, use the BTF in the module .BTF.base section
> when passed the -B option.  Both references to base BTF from split
> BTF and BTF ids will be relocated for base vmlinux on module load.
>
> Signed-off-by: Alan Maguire <alan.maguire@xxxxxxxxxx>
> ---
>  tools/bpf/resolve_btfids/main.c | 22 ++++++++++++++++++++--
>  1 file changed, 20 insertions(+), 2 deletions(-)
>
> diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c
> index d9520cb826b3..c5b622a31f18 100644
> --- a/tools/bpf/resolve_btfids/main.c
> +++ b/tools/bpf/resolve_btfids/main.c
> @@ -115,6 +115,7 @@ struct object {
>         const char *path;
>         const char *btf;
>         const char *base_btf_path;
> +       int base;
>
>         struct {
>                 int              fd;
> @@ -532,11 +533,26 @@ static int symbols_resolve(struct object *obj)
>         __u32 nr_types;
>
>         if (obj->base_btf_path) {
> -               base_btf = btf__parse(obj->base_btf_path, NULL);
> +               LIBBPF_OPTS(btf_parse_opts, optp);
> +               const char *path;
> +
> +               if (obj->base) {
> +                       optp.btf_sec = BTF_BASE_ELF_SEC;
> +                       path = obj->path;
> +                       base_btf = btf__parse_opts(path, &optp);
> +                       /* fall back to normal base parsing if no BTF_BASE_ELF_SEC */
> +                       if (libbpf_get_error(base_btf))

don't add new uses of libbpf_get_error(), it will be eventually
removed, as it's now quire error prone. Just check pointer and then
access errno, if necessary

> +                               base_btf = NULL;
> +               }
> +               if (!base_btf) {
> +                       optp.btf_sec = BTF_ELF_SEC;
> +                       path = obj->base_btf_path;
> +                       base_btf = btf__parse_opts(path, &optp);
> +               }
>                 err = libbpf_get_error(base_btf);
>                 if (err) {
>                         pr_err("FAILED: load base BTF from %s: %s\n",
> -                              obj->base_btf_path, strerror(-err));
> +                              path, strerror(-err));
>                         return -1;
>                 }
>         }
> @@ -781,6 +797,8 @@ int main(int argc, const char **argv)
>                            "BTF data"),
>                 OPT_STRING('b', "btf_base", &obj.base_btf_path, "file",
>                            "path of file providing base BTF"),
> +               OPT_INCR('B', "base", &obj.base,
> +                        "use " BTF_BASE_ELF_SEC " ELF section BTF as base"),
>                 OPT_END()
>         };
>         int err = -1;
> --
> 2.31.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