[LLVMdev] How to link the right libraries?

Chris Lattner sabre at nondot.org
Mon May 1 13:43:06 PDT 2006


On Mon, 1 May 2006, Fernando Magno Quintao Pereira wrote:
> Hello, llvmers. Could someone explain me a little about the opt tool? I am
> having problems to load a MachineFunctionPass using opt. I have this pass:

MachineFunctionPass's cannot be used as part of opt, they can only be used 
as part of LLC.  Further, you have to explicitly modify the target you are 
interested in to add it to the pass manager for that target.

What are you trying to do that requires a machine function pass?

-Chris

> #include "llvm/Pass.h"
> #include "llvm/Function.h"
> #include "llvm/CodeGen/MachineFunctionPass.h"
> #include <iostream>
> using namespace llvm;
>
> namespace {
>  struct MacFoo : public MachineFunctionPass {
>    virtual bool runOnMachineFunction(MachineFunction &Fn) {
>      std::cerr << " calling run machine function.\n";
>      return false;
>    }
>    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
>      AU.setPreservesAll();
>    }
>    virtual const char *getPassName() const {
>      return "run on machine function";
>    }
>  };
>  RegisterOpt<MacFoo> Z("allocpty", "Register Allocation Prototype Pass");
>
>  struct FuncFoo : public FunctionPass {
>    virtual bool runOnFunction(Function &F) {
>      std::cerr << "Function name: " << F.getName() << "\n";
>      return false;
>    }
>    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
>      AU.setPreservesAll();
>    }
>  };
>  RegisterOpt<FuncFoo> X("funcPass", "Hello World Pass");
> }
>
> When I call:
>
> $> opt -load ../../../../llvm/Debug/lib/LLVMTest.so -funcPass < hello.bc >
> /dev/null
>
> It works fine; when I try the machineFunctionPass class, it goes like
> this:
>
> $> opt -load ../../../../llvm/Debug/lib/LLVMTest.so -allocpty < hello.bc >
> /dev/null
>
> "opt: error while loading shared libraries:
> ../../../../llvm/Debug/lib/LLVMTest.so: undefined symbol:
> _ZN4llvm15MachineFunction3getEPKNS_8FunctionE"
>
> I would really appreciate if someone could tell me which files do I have
> to link to make the 'allocpty' to work. My Makefile is this:
>
> LEVEL = ../../..        # points to $HOME/llvm
> LIBRARYNAME = LLVMTest
> SHARED_LIBRARY = 1
> LOADABLE_MODULE = 1
>
> include $(LEVEL)/Makefile.common
>
> warm regards,
>
> Fernando
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/




More information about the llvm-dev mailing list