static int __test__bpf(int index) { int ret; void *obj_buf; size_t obj_buf_sz; struct bpf_object *obj; ret = test_llvm__fetch_bpf_obj(&obj_buf, &obj_buf_sz, bpf_testcase_table[index].prog_id, true); if (ret != TEST_OK || !obj_buf || !obj_buf_sz) { pr_debug("Unable to get BPF object, %s\n", bpf_testcase_table[index].msg_compile_fail); if (index == 0) return TEST_SKIP; else return TEST_FAIL; } obj = prepare_bpf(obj_buf, obj_buf_sz, bpf_testcase_table[index].name); if (!obj) { ret = TEST_FAIL; goto out; } ret = do_test(obj, bpf_testcase_table[index].target_func, bpf_testcase_table[index].expect_result); out: bpf__clear(); return ret; }
static int run_builtin(struct cmd_struct *p, int argc, const char **argv) { int status; struct stat st; const char *prefix; char sbuf[STRERR_BUFSIZE]; prefix = NULL; if (p->option & RUN_SETUP) prefix = NULL; /* setup_perf_directory(); */ if (use_browser == -1) use_browser = check_browser_config(p->cmd); if (use_pager == -1 && p->option & RUN_SETUP) use_pager = check_pager_config(p->cmd); if (use_pager == -1 && p->option & USE_PAGER) use_pager = 1; commit_pager_choice(); perf_env__set_cmdline(&perf_env, argc, argv); status = p->fn(argc, argv, prefix); perf_config__exit(); exit_browser(status); perf_env__exit(&perf_env); bpf__clear(); if (status) return status & 0xff; /* Somebody closed stdout? */ if (fstat(fileno(stdout), &st)) return 0; /* Ignore write errors for pipes and sockets.. */ if (S_ISFIFO(st.st_mode) || S_ISSOCK(st.st_mode)) return 0; status = 1; /* Check for ENOSPC and EIO errors.. */ if (fflush(stdout)) { fprintf(stderr, "write failure on standard output: %s", str_error_r(errno, sbuf, sizeof(sbuf))); goto out; } if (ferror(stdout)) { fprintf(stderr, "unknown write failure on standard output"); goto out; } if (fclose(stdout)) { fprintf(stderr, "close failed on standard output: %s", str_error_r(errno, sbuf, sizeof(sbuf))); goto out; } status = 0; out: return status; }
static int __test__bpf(int idx) { int ret; void *obj_buf; size_t obj_buf_sz; struct bpf_object *obj; ret = test_llvm__fetch_bpf_obj(&obj_buf, &obj_buf_sz, bpf_testcase_table[idx].prog_id, true, NULL); if (ret != TEST_OK || !obj_buf || !obj_buf_sz) { pr_debug("Unable to get BPF object, %s\n", bpf_testcase_table[idx].msg_compile_fail); if (idx == 0) return TEST_SKIP; else return TEST_FAIL; } obj = prepare_bpf(obj_buf, obj_buf_sz, bpf_testcase_table[idx].name); if ((!!bpf_testcase_table[idx].target_func) != (!!obj)) { if (!obj) pr_debug("Fail to load BPF object: %s\n", bpf_testcase_table[idx].msg_load_fail); else pr_debug("Success unexpectedly: %s\n", bpf_testcase_table[idx].msg_load_fail); ret = TEST_FAIL; goto out; } if (obj) { ret = do_test(obj, bpf_testcase_table[idx].target_func, bpf_testcase_table[idx].expect_result); if (ret != TEST_OK) goto out; if (bpf_testcase_table[idx].pin) { int err; if (!bpf_fs__mount()) { pr_debug("BPF filesystem not mounted\n"); ret = TEST_FAIL; goto out; } err = mkdir(PERF_TEST_BPF_PATH, 0777); if (err && errno != EEXIST) { pr_debug("Failed to make perf_test dir: %s\n", strerror(errno)); ret = TEST_FAIL; goto out; } if (bpf_object__pin(obj, PERF_TEST_BPF_PATH)) ret = TEST_FAIL; if (rm_rf(PERF_TEST_BPF_PATH)) ret = TEST_FAIL; } } out: bpf__clear(); return ret; }