[LLVMdev] LLVM Hello Pass load error when using opt -load Hello.so
Chuck Zhao
czhao at eecg.toronto.edu
Sun Jul 19 15:08:42 PDT 2009
Thanks, Shu,
I guess I haven't updated since my post went out.
There are actually 2 problems:
1. mis-compilation:
My LLVM-2.5 turned out to be mis-compiled using gcc-4.4.0 (surprise to
me) on Debian4-32b.
I tried a few different compilers, and gcc-4.0.4 (a relatively old one,
again surprised me) seems to work out fine.
Question: is there a good/quick/reliable way to figure out whether a
certain gcc compiler will mis-compile?
2. I ran into exactly the problem you pointed out. (Thank you)
The Makefile needs some update (after careful comparison between the
tutorial Makefile and the makefile used for lib/Transformation/Hello), by
commenting out the following line:
#LLVMLIBS = LLVMCore.a LLVMSystem.a LLVMSupport.a
I guess the tutorial needs some update, as with release 2.5 things might
have changed a bit.
Thanks for the reply
Chuck
Shuguang Feng wrote:
> Hey Chuck,
>
> I'm afraid I can't reproduce your error but...a problem you may run
> into later is that opt will complain with
>
> opt: llvm/lib/VMCore/Pass.cpp:149:
> void<unnamed>::PassRegistrar::RegisterPass(const llvm::PassInfo&):
> Assertion `Inserted && "Pass registered multiple times!"' failed.
> Aborted
>
> I "fixed" this by replacing the LLVMLIBS line in the Makefile with
> LINK_COMPONENTS according to this tutorial http://llvm.org/docs/MakefileGuide.html#LoadableModules
> and was able to build/run my pass properly.
>
> -shu
>
> On Jul 17, 11:48 am, Chuck Zhao <cz... at eecg.toronto.edu> wrote:
>
>> While learning to write LLVM passes and following the precise
>> instructions underhttp://llvm.org/docs/WritingAnLLVMPass.html,
>> <http://llvm.org/docs/WritingAnLLVMPass.html>
>> I got this error when loading the hello pass to run the test program:
>>
>> opt -load ./Release/lib/Hello.so -hello < test/test.bc > /dev/null
>> Error opening './Release/lib/Hello.so': ./Release/lib/Hello.so:
>> undefined symbol:
>> _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i
>> -load request ignored.
>> opt: Unknown command line argument '-hello'. Try: 'opt --help'
>> make: *** [run_lib] Error 1
>>
>> I think I might have missed a LLVM lib file, but can't figure out which.
>>
>> I double checked the Makefile, it does have the libLLVMCore.a,
>> libLLVMSystem.a and libLLVMSupport.a specified.
>>
>> Could people suggest?
>>
>> All are based on the LLVM release, running on Debian4-i386.
>>
>> Thank you very much
>>
>> Chuck
>>
>> Hello.cpp file:
>> #include "llvm/Pass.h"
>> #include "llvm/Function.h"
>>
>> using namespace llvm;
>>
>> namespace {
>> struct Hello : public FunctionPass {
>>
>> static char ID;
>> Hello() : FunctionPass(&ID) {}
>>
>> virtual bool runOnFunction(Function &F) {
>> llvm::cerr << "Hello: " << F.getName() << "\n";
>> return false;
>> }
>> };
>>
>> char Hello::ID = 0;
>> RegisterPass<Hello> X("hello", "Hello World Pass");
>>
>> }
>>
>> Makefile:
>> # Makefile for hello pass
>>
>> # Path to top level of LLVM heirarchy
>> LEVEL = .
>>
>> # Name of the library to build
>> LIBRARYNAME = Hello
>>
>> # Make the shared library become a loadable module so the tools can
>> # dlopen/dlsym on the resulting library.
>> LOADABLE_MODULE = 1
>>
>> # Tell the build system which LLVM libraries your pass needs. You'll
>> probably
>> # need at least LLVMSystem.a, LLVMSupport.a, LLVMCore.a but possibly several
>> # others too.
>> LLVMLIBS = LLVMCore.a LLVMSupport.a LLVMSystem.a
>>
>> # Include the makefile implementation stuff
>> include $(LEVEL)/Makefile.common
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVM... at cs.uiuc.edu http://llvm.cs.uiuc.eduhttp://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20090719/afb890e8/attachment.html>
More information about the llvm-dev
mailing list