我需要为每个.c文件生成位代码文件进行分析,所以我修改了clang如下:
--- llvm-project2/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp 2020-02-03 20:57:16.473409308 +0000
+++ llvm-project/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp 2020-02-03 20:44:32.478661999 +0000
@@ -49,6 +49,10 @@
#include <utility>
#include <vector>
+
+#include "llvm/Bitcode/BitcodeWriter.h"
+#include "llvm/Support/ToolOutputFile.h"
+
using namespace llvm;
#define DEBUG_TYPE "deadargelim"
@@ -1084,6 +1088,22 @@
PreservedAnalyses DeadArgumentEliminationPass::run(Module &M,
ModuleAnalysisManager &) {
+
+ // write out bitcode
+
+ //outs() << "DeadArg Elimination on " << M.getName() << "\n";
+ std::string FileName = M.getSourceFileName();
+ if(FileName.find(".c") != FileName.npos){
+ std::string Path = M.getSourceFileName() + ".bc";
+ outs() << "Writing to " << Path << "\n";
+ std::error_code EC;
+ raw_fd_ostream out(Path, EC, sys::fs::F_None);
+ WriteBitcodeToFile(M, out);
+ out.flush();
+ out.close();
+ outs() << "Write Done";
+ }
+
bool Changed = false;
// First pass: Do a simple check to see if any functions can have their "..."
并用我定制的clang编译了linux内核。然而,我并没有得到每个.c文件的所有.bc文件。
我的汇编说明有什么问题吗?
make CC="/path/to/clang" -j$(nproc)
我应该怎么做才能为每个.c文件生成所有.o文件,并获得我的位代码文件?