/* * bpf-loader.c * * Copyright (C) 2015 Wang Nan * Copyright (C) 2015 Huawei Inc. */ #include #include #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); }