bpftool: Add gen min_core_btf command
authorMauricio Vásquez <mauricio@kinvolk.io>
Tue, 15 Feb 2022 22:58:52 +0000 (17:58 -0500)
committerAndrii Nakryiko <andrii@kernel.org>
Wed, 16 Feb 2022 18:05:45 +0000 (10:05 -0800)
This command is implemented under the "gen" command in bpftool and the
syntax is the following:

$ bpftool gen min_core_btf INPUT OUTPUT OBJECT [OBJECT...]

INPUT is the file that contains all the BTF types for a kernel and
OUTPUT is the path of the minimize BTF file that will be created with
only the types needed by the objects.

Signed-off-by: Mauricio Vásquez <mauricio@kinvolk.io>
Signed-off-by: Rafael David Tinoco <rafael.tinoco@aquasec.com>
Signed-off-by: Lorenzo Fontana <lorenzo.fontana@elastic.co>
Signed-off-by: Leonardo Di Donato <leonardo.didonato@elastic.co>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20220215225856.671072-4-mauricio@kinvolk.io
tools/bpf/bpftool/bash-completion/bpftool
tools/bpf/bpftool/gen.c

index 493753a4962e97693cdddc7632105c571d5748b5..958e1fd71b5c5179afd67624ce3b0e9ce12ade8a 100644 (file)
@@ -1003,9 +1003,13 @@ _bpftool()
                             ;;
                     esac
                     ;;
+                min_core_btf)
+                    _filedir
+                    return 0
+                    ;;
                 *)
                     [[ $prev == $object ]] && \
-                        COMPREPLY=( $( compgen -W 'object skeleton help' -- "$cur" ) )
+                        COMPREPLY=( $( compgen -W 'object skeleton help min_core_btf' -- "$cur" ) )
                     ;;
             esac
             ;;
index 022f30490567d6ef5899c06df4b291061aedbb3c..8e066c7476912e9afbedc9db21b49d9cd4b708af 100644 (file)
@@ -1108,6 +1108,7 @@ static int do_help(int argc, char **argv)
        fprintf(stderr,
                "Usage: %1$s %2$s object OUTPUT_FILE INPUT_FILE [INPUT_FILE...]\n"
                "       %1$s %2$s skeleton FILE [name OBJECT_NAME]\n"
+               "       %1$s %2$s min_core_btf INPUT OUTPUT OBJECT [OBJECT...]\n"
                "       %1$s %2$s help\n"
                "\n"
                "       " HELP_SPEC_OPTIONS " |\n"
@@ -1118,10 +1119,45 @@ static int do_help(int argc, char **argv)
        return 0;
 }
 
+/* Create minimized BTF file for a set of BPF objects */
+static int minimize_btf(const char *src_btf, const char *dst_btf, const char *objspaths[])
+{
+       return -EOPNOTSUPP;
+}
+
+static int do_min_core_btf(int argc, char **argv)
+{
+       const char *input, *output, **objs;
+       int i, err;
+
+       if (!REQ_ARGS(3)) {
+               usage();
+               return -1;
+       }
+
+       input = GET_ARG();
+       output = GET_ARG();
+
+       objs = (const char **) calloc(argc + 1, sizeof(*objs));
+       if (!objs) {
+               p_err("failed to allocate array for object names");
+               return -ENOMEM;
+       }
+
+       i = 0;
+       while (argc)
+               objs[i++] = GET_ARG();
+
+       err = minimize_btf(input, output, objs);
+       free(objs);
+       return err;
+}
+
 static const struct cmd cmds[] = {
-       { "object",     do_object },
-       { "skeleton",   do_skeleton },
-       { "help",       do_help },
+       { "object",             do_object },
+       { "skeleton",           do_skeleton },
+       { "min_core_btf",       do_min_core_btf},
+       { "help",               do_help },
        { 0 }
 };