123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- // SPDX-License-Identifier: GPL-2.0
- #include "clang.h"
- #include "clang-c.h"
- #include "llvm/IR/Function.h"
- #include "llvm/IR/LLVMContext.h"
- #include <util-cxx.h>
- #include <tests/llvm.h>
- #include <string>
- class perf_clang_scope {
- public:
- explicit perf_clang_scope() {perf_clang__init();}
- ~perf_clang_scope() {perf_clang__cleanup();}
- };
- static std::unique_ptr<llvm::Module>
- __test__clang_to_IR(void)
- {
- unsigned int kernel_version;
- if (fetch_kernel_version(&kernel_version, NULL, 0))
- return std::unique_ptr<llvm::Module>(nullptr);
- std::string cflag_kver("-DLINUX_VERSION_CODE=" +
- std::to_string(kernel_version));
- std::unique_ptr<llvm::Module> M =
- perf::getModuleFromSource({cflag_kver.c_str()},
- "perf-test.c",
- test_llvm__bpf_base_prog);
- return M;
- }
- extern "C" {
- int test__clang_to_IR(void)
- {
- perf_clang_scope _scope;
- auto M = __test__clang_to_IR();
- if (!M)
- return -1;
- for (llvm::Function& F : *M)
- if (F.getName() == "bpf_func__SyS_epoll_pwait")
- return 0;
- return -1;
- }
- int test__clang_to_obj(void)
- {
- perf_clang_scope _scope;
- auto M = __test__clang_to_IR();
- if (!M)
- return -1;
- auto Buffer = perf::getBPFObjectFromModule(&*M);
- if (!Buffer)
- return -1;
- return 0;
- }
- }
|