diff options
Diffstat (limited to 'tools/lib/bpf/libbpf.c')
| -rw-r--r-- | tools/lib/bpf/libbpf.c | 32 | 
1 files changed, 31 insertions, 1 deletions
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 1a2c07eb7795..35f6dfcdc565 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -879,7 +879,8 @@ bpf_object__create_maps(struct bpf_object *obj)  			size_t j;  			int err = *pfd; -			pr_warning("failed to create map: %s\n", +			pr_warning("failed to create map (name: '%s'): %s\n", +				   obj->maps[i].name,  				   strerror(errno));  			for (j = 0; j < i; j++)  				zclose(obj->maps[j].fd); @@ -1744,3 +1745,32 @@ long libbpf_get_error(const void *ptr)  		return PTR_ERR(ptr);  	return 0;  } + +int bpf_prog_load(const char *file, enum bpf_prog_type type, +		  struct bpf_object **pobj, int *prog_fd) +{ +	struct bpf_program *prog; +	struct bpf_object *obj; +	int err; + +	obj = bpf_object__open(file); +	if (IS_ERR(obj)) +		return -ENOENT; + +	prog = bpf_program__next(NULL, obj); +	if (!prog) { +		bpf_object__close(obj); +		return -ENOENT; +	} + +	bpf_program__set_type(prog, type); +	err = bpf_object__load(obj); +	if (err) { +		bpf_object__close(obj); +		return -EINVAL; +	} + +	*pobj = obj; +	*prog_fd = bpf_program__fd(prog); +	return 0; +}  | 
