[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