diff options
Diffstat (limited to 'tools/lib/bpf/libbpf.c')
| -rw-r--r-- | tools/lib/bpf/libbpf.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index e6ad87512519..11c25d9ea431 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c | |||
| @@ -840,12 +840,19 @@ static int bpf_object__elf_collect(struct bpf_object *obj, int flags) | |||
| 840 | obj->efile.maps_shndx = idx; | 840 | obj->efile.maps_shndx = idx; |
| 841 | else if (strcmp(name, BTF_ELF_SEC) == 0) { | 841 | else if (strcmp(name, BTF_ELF_SEC) == 0) { |
| 842 | obj->btf = btf__new(data->d_buf, data->d_size); | 842 | obj->btf = btf__new(data->d_buf, data->d_size); |
| 843 | if (IS_ERR(obj->btf) || btf__load(obj->btf)) { | 843 | if (IS_ERR(obj->btf)) { |
| 844 | pr_warning("Error loading ELF section %s: %ld. Ignored and continue.\n", | 844 | pr_warning("Error loading ELF section %s: %ld. Ignored and continue.\n", |
| 845 | BTF_ELF_SEC, PTR_ERR(obj->btf)); | 845 | BTF_ELF_SEC, PTR_ERR(obj->btf)); |
| 846 | if (!IS_ERR(obj->btf)) | ||
| 847 | btf__free(obj->btf); | ||
| 848 | obj->btf = NULL; | 846 | obj->btf = NULL; |
| 847 | continue; | ||
| 848 | } | ||
| 849 | err = btf__load(obj->btf); | ||
| 850 | if (err) { | ||
| 851 | pr_warning("Error loading %s into kernel: %d. Ignored and continue.\n", | ||
| 852 | BTF_ELF_SEC, err); | ||
| 853 | btf__free(obj->btf); | ||
| 854 | obj->btf = NULL; | ||
| 855 | err = 0; | ||
| 849 | } | 856 | } |
| 850 | } else if (strcmp(name, BTF_EXT_ELF_SEC) == 0) { | 857 | } else if (strcmp(name, BTF_EXT_ELF_SEC) == 0) { |
| 851 | btf_ext_data = data; | 858 | btf_ext_data = data; |
