mirror of https://gitee.com/openkylin/linux.git
58 lines
1.1 KiB
C
58 lines
1.1 KiB
C
|
/*
|
||
|
* bpf-loader.c
|
||
|
*
|
||
|
* Copyright (C) 2015 Wang Nan <wangnan0@huawei.com>
|
||
|
* Copyright (C) 2015 Huawei Inc.
|
||
|
*/
|
||
|
|
||
|
#include <bpf/libbpf.h>
|
||
|
#include <linux/err.h>
|
||
|
#include "perf.h"
|
||
|
#include "debug.h"
|
||
|
#include "bpf-loader.h"
|
||
|
|
||
|
#define DEFINE_PRINT_FN(name, level) \
|
||
|
static int libbpf_##name(const char *fmt, ...) \
|
||
|
{ \
|
||
|
va_list args; \
|
||
|
int ret; \
|
||
|
\
|
||
|
va_start(args, fmt); \
|
||
|
ret = veprintf(level, verbose, pr_fmt(fmt), args);\
|
||
|
va_end(args); \
|
||
|
return ret; \
|
||
|
}
|
||
|
|
||
|
DEFINE_PRINT_FN(warning, 0)
|
||
|
DEFINE_PRINT_FN(info, 0)
|
||
|
DEFINE_PRINT_FN(debug, 1)
|
||
|
|
||
|
struct bpf_object *bpf__prepare_load(const char *filename)
|
||
|
{
|
||
|
struct bpf_object *obj;
|
||
|
static bool libbpf_initialized;
|
||
|
|
||
|
if (!libbpf_initialized) {
|
||
|
libbpf_set_print(libbpf_warning,
|
||
|
libbpf_info,
|
||
|
libbpf_debug);
|
||
|
libbpf_initialized = true;
|
||
|
}
|
||
|
|
||
|
obj = bpf_object__open(filename);
|
||
|
if (!obj) {
|
||
|
pr_debug("bpf: failed to load %s\n", filename);
|
||
|
return ERR_PTR(-EINVAL);
|
||
|
}
|
||
|
|
||
|
return obj;
|
||
|
}
|
||
|
|
||
|
void bpf__clear(void)
|
||
|
{
|
||
|
struct bpf_object *obj, *tmp;
|
||
|
|
||
|
bpf_object__for_each_safe(obj, tmp)
|
||
|
bpf_object__close(obj);
|
||
|
}
|