如何从.ll文件获取源代码行LLVM

时间:2016-07-12 02:53:31

标签: c++ c llvm llvm-clang llvm-ir

我正在使用LLVM 3.4并希望从IR获取源文件的行号信息。 IR由Clang的简单c代码生成。 我想从IR正文中的行获取源c文件中的行号。

我试过了 -

  1. 对于教学BI, unsigned Line = Line = BI-> getDebugLoc()。getLine();
  2. 对于循环L,std :: cout<< 1→getStartLoc()函数getline();
  3. 但是,存储/打印的结果始终为0.我不知道如何从LLVM IR获取源代码中的行号。

    我的源C文件是 -

    #include <stdio.h>
    
    int main()
    {
    
     int i;
    
     int inbuf[100];
     int outbuf[100];
    
     for(i = 0; i < 100; ++i)        
            inbuf[i] ^= outbuf[i];
    
     inbuf[1] += 402;
     inbuf[6] += 107;
     inbuf[97] += 231;
    
     for(i = 0; i < 100; ++i)       
     {
             inbuf[i] += outbuf[i];
     }
    
     inbuf[47] += 312;  
    
        //print-statements 
     for (i=0;i<100;i++) {
            printf("inbuf[%d] = %d\n",i,inbuf[i]);              
    }
    
    return 0;
    

    使用的命令 - 〜/ llvm / build / Release + Asserts / bin / clang -O3 -fno-unroll-loops -fno-vectorize -fno-slp-vectorize -S -emit-llvm sample.c -o sample.ll

    谢谢!

1 个答案:

答案 0 :(得分:3)

要将行号信息输入.ll文件,您必须为clang指定-O0-g个标记。

http://llvm.org/docs/SourceLevelDebugging.html#debugging-optimized-code

行号存储在专门的元数据节点中。

http://llvm.org/docs/LangRef.html#specialized-metadata-nodes

因此完整的命令行必须如下所示:

~/llvm/build/Release+Asserts/bin/clang -O0 -g -S -emit-llvm sample.c -o sample.ll