[LLVMdev] "symbol lookup error" while running a Simple Loop Pass
Carlos Sánchez de La Lama
csanchezdll at gmail.com
Wed Jul 4 23:44:13 PDT 2012
Hi,
this is probably related to the reported bug:
http://llvm.org/bugs/show_bug.cgi?id=13144
You have two possible solutions:
1) add KEEP_SYMBOLS := 1 to opt Makefile and recompile OR
2) used a shared build of LLVM
BR
Carlos
PD: If you are uing OSX, the problem might be slightly more complex.
Look at my mail which is linked at the end of the bug report.
2012/7/5 Arnamoy Bhattacharyya <arnamoy at ualberta.ca>:
> Hello;
>
> I wrote this simple loop pass to collect the number of instructions in each
> loop of the program. The code is as follows-
>
> #define DEBUG_TYPE "loopinst"
> #include "llvm/Pass.h"
> #include "llvm/Analysis/LoopPass.h"
> #include "llvm/Support/raw_ostream.h"
> #include "llvm/ADT/Statistic.h"
> #include "llvm/Instructions.h"
> #include "llvm/Analysis/LoopInfo.h"
>
> using namespace llvm;
>
> STATISTIC(LoopInstNum, "Counts number of instructions in a loop");
>
> namespace {
> struct LoopInst : public LoopPass {
> static char ID; // Pass identification, replacement for typeid
> LoopInst() : LoopPass(ID) {}
>
> virtual bool runOnLoop(Loop *L, LPPassManager &LPM) {
> LoopInfo *LI = &getAnalysis<LoopInfo>();
> for (Loop::block_iterator b = L->block_begin(), be = L->block_end();b != be;
> ++b)
> {
> for (BasicBlock::iterator i = (*b)->begin(), ie = (*b)->end(); i != ie; ++i)
> {
> ++LoopInstNum;
> errs() << "Hello: ";
> }
> }
>
> return false;
> }
>
> // We don't modify the program, so we preserve all analyses
> virtual void getAnalysisUsage(AnalysisUsage &AU) const {
> AU.addRequired<LoopInfo>();
> AU.addPreserved<LoopInfo>();
> }
> };
> }
>
> char LoopInst::ID = 0;
> static RegisterPass<LoopInst> X("loop-inst", "loop instruction Pass");
>
>
> I put it under llvm-src/lib/Transforms directory and ran a "make" from there
> to create the .so file. But when I run opt with the library, I get the
> following error -
>
> opt -load=/home/arnie/llvm-development/llvm/Debug+Asserts/lib/LoopInst.so
> -loops -loop-inst a.s
>
> opt: symbol lookup error:
> /home/arnie/llvm-development/llvm/Debug+Asserts/lib/LoopInst.so: undefined
> symbol: _ZNK4llvm8LoopBaseINS_10BasicBlockENS_4LoopEE11block_beginEv
>
> Can anyone tell me what I am doing wrong?
>
> Also what's the difference between declaring a pass as a struct vs declaring
> it as a class. In the "writing a pass" tutorial the "Hello" pass has been
> declared as a struct but most (if not all) the LLVM passes are written as
> classes.
>
> Thanks a lot;
> --
> Arnamoy Bhattacharyya
> Athabasca Hall 143
> Department of Computing Science - University of Alberta
> Edmonton, Alberta, Canada, T6G 2E8
> 587-710-7073
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
More information about the llvm-dev
mailing list