Thanks, Also, every method inherited by LoopBase causes the same error, while Loop methods go smooth. On 9 May 2013 01:05, Andrew Trick <atrick at apple.com> wrote:> > On May 8, 2013, at 7:43 PM, Giacomo Tagliabue <giacomo.tag at gmail.com> > wrote: > > Hello, > I am building a loop pass following these instructions: > http://llvm.org/docs/WritingAnLLVMPass.html > Everything works fine, I did it many times for Function Passes, but in the > runOnLoopmethod, whenever I call a method of the loop L passed as argument, > for example L->begin(), I get the following error: > > opt: symbol lookup error: >> /home/giacomo/llvmcsfv/Debug+Asserts/lib/Acsl.so: undefined symbol: >> _ZNK4llvm8LoopBaseINS_10BasicBlockENS_4LoopEE5beginEv > > > Where Acsl is the name of the loadable module. If I remove all the > instructions from runOnPass but a debug print, it works fine (it prints > it), so the problem is not the module. > Does anybody have any Idea? > Thank you very much, > Giacomo > > > I'm not sure why your dynamic linker looks in Acsl.so. > llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::begin() is explicitly > instantiated in LoopInfo.cpp. With a debug build on darwin, that symbol is > undefined in my dynamically loaded module, but exported by the opt binary. > So a dynamically loaded loop pass as you described works fine for me. > > Someone else should try this on linux with shared libs. > > You can also try removing these lines from LoopInfo.h, which seem > superfluous to me: > > __extension__ extern template class LoopBase<BasicBlock, Loop>; > __extension__ extern template class LoopInfoBase<BasicBlock, Loop>; > > -Andy > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130509/552ffdf1/attachment.html>
Wow, commenting those two lines worked out fine for me, thanks! On 9 May 2013 09:34, Giacomo Tagliabue <giacomo.tag at gmail.com> wrote:> Thanks, > Also, every method inherited by LoopBase causes the same error, while Loop > methods go smooth. > > > On 9 May 2013 01:05, Andrew Trick <atrick at apple.com> wrote: > >> >> On May 8, 2013, at 7:43 PM, Giacomo Tagliabue <giacomo.tag at gmail.com> >> wrote: >> >> Hello, >> I am building a loop pass following these instructions: >> http://llvm.org/docs/WritingAnLLVMPass.html >> Everything works fine, I did it many times for Function Passes, but in >> the runOnLoopmethod, whenever I call a method of the loop L passed as >> argument, for example L->begin(), I get the following error: >> >> opt: symbol lookup error: >>> /home/giacomo/llvmcsfv/Debug+Asserts/lib/Acsl.so: undefined symbol: >>> _ZNK4llvm8LoopBaseINS_10BasicBlockENS_4LoopEE5beginEv >> >> >> Where Acsl is the name of the loadable module. If I remove all the >> instructions from runOnPass but a debug print, it works fine (it prints >> it), so the problem is not the module. >> Does anybody have any Idea? >> Thank you very much, >> Giacomo >> >> >> I'm not sure why your dynamic linker looks in Acsl.so. >> llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::begin() is explicitly >> instantiated in LoopInfo.cpp. With a debug build on darwin, that symbol is >> undefined in my dynamically loaded module, but exported by the opt binary. >> So a dynamically loaded loop pass as you described works fine for me. >> >> Someone else should try this on linux with shared libs. >> >> You can also try removing these lines from LoopInfo.h, which seem >> superfluous to me: >> >> __extension__ extern template class LoopBase<BasicBlock, Loop>; >> __extension__ extern template class LoopInfoBase<BasicBlock, Loop>; >> >> -Andy >> >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130509/453eae21/attachment.html>
On May 9, 2013, at 9:56 AM, Giacomo Tagliabue <giacomo.tag at gmail.com> wrote:> Wow, commenting those two lines worked out fine for me, thanks!Would you mind filing a bug with more details on your development environment: compiler version, linker, platform? Also include you compile/link command lines. I think those "extern template" decls are meant to be a compile/link time optimization. But no one actually verified that it helps. If it won't always work with shared libs, they should be removed. OTOH, if it's a bug in your host compiler, maybe we just need better #ifdefs. I would prefer to just remove those extern decls, but I don't know the rules for template instantiation and symbol linking well enough to make any strong claims. -Andy> On 9 May 2013 09:34, Giacomo Tagliabue <giacomo.tag at gmail.com> wrote: > Thanks, > Also, every method inherited by LoopBase causes the same error, while Loop methods go smooth. > > > On 9 May 2013 01:05, Andrew Trick <atrick at apple.com> wrote: > > On May 8, 2013, at 7:43 PM, Giacomo Tagliabue <giacomo.tag at gmail.com> wrote: > >> Hello, >> I am building a loop pass following these instructions: http://llvm.org/docs/WritingAnLLVMPass.html >> Everything works fine, I did it many times for Function Passes, but in the runOnLoopmethod, whenever I call a method of the loop L passed as argument, for example L->begin(), I get the following error: >> >> opt: symbol lookup error: /home/giacomo/llvmcsfv/Debug+Asserts/lib/Acsl.so: undefined symbol: _ZNK4llvm8LoopBaseINS_10BasicBlockENS_4LoopEE5beginEv >> >> Where Acsl is the name of the loadable module. If I remove all the instructions from runOnPass but a debug print, it works fine (it prints it), so the problem is not the module. >> Does anybody have any Idea? >> Thank you very much, >> Giacomo > > I'm not sure why your dynamic linker looks in Acsl.so. llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::begin() is explicitly instantiated in LoopInfo.cpp. With a debug build on darwin, that symbol is undefined in my dynamically loaded module, but exported by the opt binary. So a dynamically loaded loop pass as you described works fine for me. > > Someone else should try this on linux with shared libs. > > You can also try removing these lines from LoopInfo.h, which seem superfluous to me: > > __extension__ extern template class LoopBase<BasicBlock, Loop>; > __extension__ extern template class LoopInfoBase<BasicBlock, Loop>; > > -Andy-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130509/11f10a64/attachment.html>