struct bpf_object *bpf__prepare_load(const char *filename, bool source) { struct bpf_object *obj; if (!libbpf_initialized) { libbpf_set_print(libbpf_warning, libbpf_info, libbpf_debug); libbpf_initialized = true; } if (source) { int err; void *obj_buf; size_t obj_buf_sz; err = llvm__compile_bpf(filename, &obj_buf, &obj_buf_sz); if (err) return ERR_PTR(-BPF_LOADER_ERRNO__COMPILE); obj = bpf_object__open_buffer(obj_buf, obj_buf_sz, filename); free(obj_buf); } else obj = bpf_object__open(filename); if (IS_ERR(obj)) { pr_debug("bpf: failed to load %s\n", filename); return obj; } return obj; }
struct bpf_object *bpf__prepare_load(const char *filename, bool source) { struct bpf_object *obj; if (!libbpf_initialized) { libbpf_set_print(libbpf_warning, libbpf_info, libbpf_debug); libbpf_initialized = true; } if (source) { int err; void *obj_buf; size_t obj_buf_sz; perf_clang__init(); err = perf_clang__compile_bpf(filename, &obj_buf, &obj_buf_sz); perf_clang__cleanup(); if (err) { pr_warning("bpf: builtin compilation failed: %d, try external compiler\n", err); err = llvm__compile_bpf(filename, &obj_buf, &obj_buf_sz); if (err) return ERR_PTR(-BPF_LOADER_ERRNO__COMPILE); } else pr_debug("bpf: successfull builtin compilation\n"); obj = bpf_object__open_buffer(obj_buf, obj_buf_sz, filename); if (!IS_ERR(obj) && llvm_param.dump_obj) llvm__dump_obj(filename, obj_buf, obj_buf_sz); free(obj_buf); } else obj = bpf_object__open(filename); if (IS_ERR(obj)) { pr_debug("bpf: failed to load %s\n", filename); return obj; } return obj; }