[PATCH bpf-next] libbpf: Use text error for btf_custom_path failures

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

 



Use libbpf_strerror_r to expand the error when failed to parse the btf
file at btf_custom_path. It does not change a lot locally, but since the
error will bubble up through a few layers, it may become quite
confusing otherwise. As an example here is what happens when the file
indicated via btf_custom_path does not exist and the caller uses
strerror as well:

    libbpf: failed to parse target BTF: -2
    libbpf: failed to perform CO-RE relocations: -2
    libbpf: failed to load object 'bpf_probe'
    libbpf: failed to load BPF skeleton 'bpf_probe': -2
    [caller]: failed to load BPF object (errno: 2 | message: No such file or directory)

In this context "No such file or directory" could be easily
misinterpreted as belonging to some other part of loading process, e.g.
the BPF object itself. With this change it would look a bit better:

    libbpf: failed to parse target BTF: No such file or directory
    libbpf: failed to perform CO-RE relocations: -2
    libbpf: failed to load object 'bpf_probe'
    libbpf: failed to load BPF skeleton 'bpf_probe': -2
    [caller]: failed to load BPF object (errno: 2 | message: No such file or directory)

Signed-off-by: Dmitrii Dolgov <9erthalion6@xxxxxxxxx>
---
 tools/lib/bpf/libbpf.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 05c4db355f28..02a47552ad14 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -5683,7 +5683,10 @@ bpf_object__relocate_core(struct bpf_object *obj, const char *targ_btf_path)
 		obj->btf_vmlinux_override = btf__parse(targ_btf_path, NULL);
 		err = libbpf_get_error(obj->btf_vmlinux_override);
 		if (err) {
-			pr_warn("failed to parse target BTF: %d\n", err);
+			char *cp, errmsg[STRERR_BUFSIZE];
+
+			cp = libbpf_strerror_r(err, errmsg, sizeof(errmsg));
+			pr_warn("failed to parse target BTF: %s\n", cp);
 			return err;
 		}
 	}
-- 
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