2013-01-16 22 views
2

我用LLVM已經存在的通行證,沒有問題,直到我試圖使用MemDepPrinter.cpp:http://llvm.org/doxygen/MemDepPrinter_8cpp_source.html。我得到了以下段錯誤:llvm MemDepPrinter segfault

llvm[0]: Compiling MyMemDepPrinter.cpp for Release+Asserts build (PIC) 
llvm[0]: Linking Release+Asserts Loadable Module MyMemDepPrinter.so 
WARNING: You're attempting to print out a bitcode file. 
This is inadvisable as it may cause display problems. If 
you REALLY want to taste LLVM bitcode first-hand, you 
can force output with the `-f' option. 

0 opt  0x08eaf9a8 
1 opt  0x08eaff24 
2   0xb7753400 __kernel_sigreturn + 0 
3 opt  0x08c00c19 llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::PHITransAddr const&, llvm::AliasAnalysis::Location const&, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<llvm::NonLocalDepResult>&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfo<llvm::BasicBlock*> >&, bool) + 3673 
4 opt  0x08c019aa llvm::MemoryDependenceAnalysis::getNonLocalPointerDependency(llvm::AliasAnalysis::Location const&, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<llvm::NonLocalDepResult>&) + 266 
5 opt  0x08bf1bed 
6 opt  0x08e3415c llvm::FPPassManager::runOnFunction(llvm::Function&) + 636 
7 opt  0x08e341c8 llvm::FPPassManager::runOnModule(llvm::Module&) + 56 
8 opt  0x08e33de4 llvm::MPPassManager::runOnModule(llvm::Module&) + 692 
9 opt  0x08e37270 llvm::PassManagerImpl::run(llvm::Module&) + 240 
10 opt  0x08e37386 llvm::PassManager::run(llvm::Module&) + 38 
11 opt  0x081a290f main + 6095 
12 libc.so.6 0xb74604d3 __libc_start_main + 243 
13 opt  0x081b8509 
Stack dump: 
0. Program arguments: //home/alex/llvm/Release+Asserts/bin/opt -load //home/alex/llvm/Release+Asserts/lib/MyMemDepPrinter.so -memdep -print-memdeps //home/alex/llvm/tools/clang/woRKSPACE/Test.bc 
1. Running pass 'Function Pass Manager' on module '//home/alex/llvm/tools/clang/woRKSPACE/Test.bc'. 
2. Running pass 'Print MemDeps of function' on function '@_Z9deadcode1i' 
./run.sh: line 14: 3326 Segmentation fault  (core dumped) //home/alex/llvm/Release+Asserts/bin/opt -load //home/alex/llvm/Release+Asserts/lib/MyMemDepPrinter.so -print-memdeps //home/alex/llvm/tools/clang/woRKSPACE/Test.bc 

當我在GDB模式下運行它,我得到:

Program received signal SIGSEGV, Segmentation fault. 
0x08c00c19 in llvm::MemoryDependenceAnalysis::getNonLocalPointerDepFromBB(llvm::PHITransAddr const&, llvm::AliasAnalysis::Location const&, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<llvm::NonLocalDepResult>&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfo<llvm::BasicBlock*> >&, bool)() 
(gdb) x/i $pc 
=> 0x8c00c19 <_ZN4llvm24MemoryDependenceAnalysis27getNonLocalPointerDepFromBBERKNS_12PHITransAddrERKNS_13AliasAnalysis8LocationEbPNS_10BasicBlockERNS_15SmallVectorImplINS_17NonLocalDepResultEEERNS_8DenseMapIS9_PNS_5ValueENS_12DenseMapInfoIS9_EEEEb+3673>: mov 0x10(%eax),%eax 

作爲更新,線路問題是:

MDA.getNonLocalPointerDependency(Loc, true, LI->getParent(), NLDI); 

,而不是4個參數是問題。所有這些都已定義,我可以使用它們。我沒有segfault,如果我消除線。

我認爲這個問題是在註釋中定義:

FIXME: Handle atomic/volatile loads. 

請告訴我,我怎麼能解決這個問題(也許把一個條件,以避免原子/揮發性負載),或者如果通過正常工作對你如果是這樣,你如何使用它。

謝謝!

回答

1

我看到了另一個更新的帖子,所以我認爲我更好地嘗試手動依賴。這不是第一次在開源代碼中出現錯誤。我試圖運行通行證,我有同樣的問題。 getNonLocalPointerDependency方法的相同問題也會出現在其他指令類型中,例如store,不僅在您提到的地方。