代码之家  ›  专栏  ›  技术社区  ›  Sheng Wu

编译Linux内核时,如何为每个.c文件生成所有.o文件?

  •  0
  • Sheng Wu  · 技术社区  · 2 年前

    我需要为每个.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文件,并获得我的位代码文件?

    0 回复  |  直到 2 年前
    推荐文章