diff options
Diffstat (limited to 'tools/bpf/bpftool/main.c')
| -rw-r--r-- | tools/bpf/bpftool/main.c | 15 | 
1 files changed, 14 insertions, 1 deletions
| diff --git a/tools/bpf/bpftool/main.c b/tools/bpf/bpftool/main.c index 682daaa49e6a..b86f450e6fce 100644 --- a/tools/bpf/bpftool/main.c +++ b/tools/bpf/bpftool/main.c @@ -11,6 +11,7 @@  #include <bpf/bpf.h>  #include <bpf/libbpf.h> +#include <bpf/btf.h>  #include "main.h" @@ -28,6 +29,7 @@ bool show_pinned;  bool block_mount;  bool verifier_logs;  bool relaxed_maps; +struct btf *base_btf;  struct pinned_obj_table prog_table;  struct pinned_obj_table map_table;  struct pinned_obj_table link_table; @@ -391,6 +393,7 @@ int main(int argc, char **argv)  		{ "mapcompat",	no_argument,	NULL,	'm' },  		{ "nomount",	no_argument,	NULL,	'n' },  		{ "debug",	no_argument,	NULL,	'd' }, +		{ "base-btf",	required_argument, NULL, 'B' },  		{ 0 }  	};  	int opt, ret; @@ -407,7 +410,7 @@ int main(int argc, char **argv)  	hash_init(link_table.table);  	opterr = 0; -	while ((opt = getopt_long(argc, argv, "Vhpjfmnd", +	while ((opt = getopt_long(argc, argv, "VhpjfmndB:",  				  options, NULL)) >= 0) {  		switch (opt) {  		case 'V': @@ -441,6 +444,15 @@ int main(int argc, char **argv)  			libbpf_set_print(print_all_levels);  			verifier_logs = true;  			break; +		case 'B': +			base_btf = btf__parse(optarg, NULL); +			if (libbpf_get_error(base_btf)) { +				p_err("failed to parse base BTF at '%s': %ld\n", +				      optarg, libbpf_get_error(base_btf)); +				base_btf = NULL; +				return -1; +			} +			break;  		default:  			p_err("unrecognized option '%s'", argv[optind - 1]);  			if (json_output) @@ -465,6 +477,7 @@ int main(int argc, char **argv)  		delete_pinned_obj_table(&map_table);  		delete_pinned_obj_table(&link_table);  	} +	btf__free(base_btf);  	return ret;  } | 
