tools/bpftool: Use libbpf's btf__parse() API for parsing BTF from file
authorAndrii Nakryiko <andriin@fb.com>
Sun, 2 Aug 2020 01:32:18 +0000 (18:32 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Mon, 3 Aug 2020 14:39:48 +0000 (16:39 +0200)
Use generic libbpf API to parse BTF data from file, instead of re-implementing
it in bpftool.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20200802013219.864880-3-andriin@fb.com
tools/bpf/bpftool/btf.c

index 37c0913..8ab142f 100644 (file)
@@ -422,54 +422,6 @@ done:
        return err;
 }
 
-static struct btf *btf__parse_raw(const char *file)
-{
-       struct btf *btf;
-       struct stat st;
-       __u8 *buf;
-       FILE *f;
-
-       if (stat(file, &st))
-               return NULL;
-
-       f = fopen(file, "rb");
-       if (!f)
-               return NULL;
-
-       buf = malloc(st.st_size);
-       if (!buf) {
-               btf = ERR_PTR(-ENOMEM);
-               goto exit_close;
-       }
-
-       if ((size_t) st.st_size != fread(buf, 1, st.st_size, f)) {
-               btf = ERR_PTR(-EINVAL);
-               goto exit_free;
-       }
-
-       btf = btf__new(buf, st.st_size);
-
-exit_free:
-       free(buf);
-exit_close:
-       fclose(f);
-       return btf;
-}
-
-static bool is_btf_raw(const char *file)
-{
-       __u16 magic = 0;
-       int fd, nb_read;
-
-       fd = open(file, O_RDONLY);
-       if (fd < 0)
-               return false;
-
-       nb_read = read(fd, &magic, sizeof(magic));
-       close(fd);
-       return nb_read == sizeof(magic) && magic == BTF_MAGIC;
-}
-
 static int do_dump(int argc, char **argv)
 {
        struct btf *btf = NULL;
@@ -547,11 +499,7 @@ static int do_dump(int argc, char **argv)
                }
                NEXT_ARG();
        } else if (is_prefix(src, "file")) {
-               if (is_btf_raw(*argv))
-                       btf = btf__parse_raw(*argv);
-               else
-                       btf = btf__parse_elf(*argv, NULL);
-
+               btf = btf__parse(*argv, NULL);
                if (IS_ERR(btf)) {
                        err = -PTR_ERR(btf);
                        btf = NULL;