diff options
Diffstat (limited to 'tools/bpf/bpftool/prog.c')
| -rw-r--r-- | tools/bpf/bpftool/prog.c | 24 | 
1 files changed, 13 insertions, 11 deletions
| diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c index 43fdbbfe41bb..2ce9c5ba1934 100644 --- a/tools/bpf/bpftool/prog.c +++ b/tools/bpf/bpftool/prog.c @@ -493,7 +493,7 @@ static int do_dump(int argc, char **argv)  	info = &info_linear->info;  	if (mode == DUMP_JITED) { -		if (info->jited_prog_len == 0) { +		if (info->jited_prog_len == 0 || !info->jited_prog_insns) {  			p_info("no instructions returned");  			goto err_free;  		} @@ -1091,10 +1091,11 @@ free_data_in:  static int load_with_options(int argc, char **argv, bool first_prog_only)  { +	enum bpf_prog_type common_prog_type = BPF_PROG_TYPE_UNSPEC; +	DECLARE_LIBBPF_OPTS(bpf_object_open_opts, open_opts, +		.relaxed_maps = relaxed_maps, +	);  	struct bpf_object_load_attr load_attr = { 0 }; -	struct bpf_object_open_attr open_attr = { -		.prog_type = BPF_PROG_TYPE_UNSPEC, -	};  	enum bpf_attach_type expected_attach_type;  	struct map_replace *map_replace = NULL;  	struct bpf_program *prog = NULL, *pos; @@ -1105,11 +1106,13 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)  	const char *pinfile;  	unsigned int i, j;  	__u32 ifindex = 0; +	const char *file;  	int idx, err; +  	if (!REQ_ARGS(2))  		return -1; -	open_attr.file = GET_ARG(); +	file = GET_ARG();  	pinfile = GET_ARG();  	while (argc) { @@ -1118,7 +1121,7 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)  			NEXT_ARG(); -			if (open_attr.prog_type != BPF_PROG_TYPE_UNSPEC) { +			if (common_prog_type != BPF_PROG_TYPE_UNSPEC) {  				p_err("program type already specified");  				goto err_free_reuse_maps;  			} @@ -1135,8 +1138,7 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)  			strcat(type, *argv);  			strcat(type, "/"); -			err = libbpf_prog_type_by_name(type, -						       &open_attr.prog_type, +			err = libbpf_prog_type_by_name(type, &common_prog_type,  						       &expected_attach_type);  			free(type);  			if (err < 0) @@ -1224,16 +1226,16 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)  	set_max_rlimit(); -	obj = __bpf_object__open_xattr(&open_attr, bpf_flags); +	obj = bpf_object__open_file(file, &open_opts);  	if (IS_ERR_OR_NULL(obj)) {  		p_err("failed to open object file");  		goto err_free_reuse_maps;  	}  	bpf_object__for_each_program(pos, obj) { -		enum bpf_prog_type prog_type = open_attr.prog_type; +		enum bpf_prog_type prog_type = common_prog_type; -		if (open_attr.prog_type == BPF_PROG_TYPE_UNSPEC) { +		if (prog_type == BPF_PROG_TYPE_UNSPEC) {  			const char *sec_name = bpf_program__title(pos, false);  			err = libbpf_prog_type_by_name(sec_name, &prog_type, |