From a239aaeea082365a189093ab37ea7acc674623c5 Mon Sep 17 00:00:00 2001 From: "chengshuyi.csy" Date: Fri, 31 Dec 2021 10:56:30 +0800 Subject: [PATCH] libbpf: support to autorun btf command to decompress btf file. Signed-off-by: chengshuyi.csy --- source/lib/internal/ebpf/libbpf/src/btf.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/source/lib/internal/ebpf/libbpf/src/btf.c b/source/lib/internal/ebpf/libbpf/src/btf.c index f7e46e10..97427098 100644 --- a/source/lib/internal/ebpf/libbpf/src/btf.c +++ b/source/lib/internal/ebpf/libbpf/src/btf.c @@ -4597,9 +4597,10 @@ struct btf *libbpf_find_kernel_btf(void) { "/usr/lib/debug/boot/vmlinux-%1$s.debug" }, { "/usr/lib/debug/lib/modules/%1$s/vmlinux" }, }; - char path[PATH_MAX + 1]; + char path[PATH_MAX + 1], btf_exe_path[PATH_MAX + 1], logbuf[1024]; char *sysak_env_path; struct utsname buf; + FILE *fp; struct btf *btf; int i; @@ -4607,6 +4608,23 @@ struct btf *libbpf_find_kernel_btf(void) sysak_env_path = getenv("SYSAK_WORK_PATH"); if (sysak_env_path) { snprintf(path, PATH_MAX, "%s/tools/vmlinux-%s", sysak_env_path, buf.release); + snprintf(btf_exe_path, PATH_MAX, "%s/tools/btf", sysak_env_path); + + if (access(path, R_OK)) { + fp = NULL; + + if ((fp = popen(btf_exe_path, "r")) == NULL) { + pr_debug("exec \'%s\' fail\n", btf_exe_path); + goto out; + } + + while (fgets(logbuf, sizeof(logbuf) - 1, fp) != NULL) + pr_debug("%s", logbuf); + pclose(fp); + + if (access(path, R_OK)) + goto out; + } btf = btf__parse(path, NULL); pr_debug("loading kernel BTF '%s': %ld\n", -- Gitee