[LLVMdev] why RegisterPass<TargetData> initialize itself twice in my system

Xin LIU navy.xliu at gmail.com
Sat May 23 10:00:32 PDT 2009


HI, Developers:

I linked libLTO.so in $LLVMROOT/Debug/lib

however, my program crashes in assertion at 149line [Pass.cpp]

  void RegisterPass(const PassInfo &PI) {
    bool Inserted =
      PassInfoMap.insert(std::make_pair(PI.getTypeInfo(),&PI)).second;
    assert(Inserted && "Pass registered multiple times!");    
  }

i confirm that there is only one static variable suspecting to call this
register routine to register "TargetData" Pass in L35 [TargetData.cpp]

  // Register the default SparcV9 implementation...
  static RegisterPass<TargetData> X("targetdata", "Target DataLayout",
false, true);

but back track things before main entry, i got actually twice same
intializations: the attached is bt using gdb, why this happens?

My system is x86_64 in linux-Fedora 7. Is that okay i remove the asssert
stmt to use it?
-------------- next part --------------
;; 1st 
PassInfo (this=0x2aaaac3472a0, name=0x2aaaabe24421 "Target Data Layout", arg=0x2aaaabe24434 "targetdata", pi=17004736, normal=0xada74e <llvm::Pass* llvm::callDefaultCtor<llvm::TargetData>()>, isCFGOnly=false, is_analysis=true) at /home/xliu/dev/llvm/include/llvm/PassSupport.h:59
(gdb) bt
#0  PassInfo (this=0x2aaaac3472a0, name=0x2aaaabe24421 "Target Data Layout", arg=0x2aaaabe24434 "targetdata", pi=17004736, normal=0xada74e <llvm::Pass* llvm::callDefaultCtor<llvm::TargetData>()>, isCFGOnly=false, is_analysis=true) at /home/xliu/dev/llvm/include/llvm/PassSupport.h:59
#1  0x0000000000ada6f1 in RegisterPass (this=0x2aaaac3472a0, PassArg=0x2aaaabe24434 "targetdata", Name=0x2aaaabe24421 "Target Data Layout", CFGOnly=false, is_analysis=true) at /home/xliu/dev/llvm/include/llvm/PassSupport.h:168
#2  0x00002aaaabb0e528 in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at TargetData.cpp:36
#3  0x00002aaaabb0e57b in global constructors keyed to _ZN4llvm10TargetData2IDE () at TargetData.cpp:604
#4  0x00002aaaabc0cb86 in __do_global_ctors_aux () from /usr/local/lib64/libLTO.so
#5  0x00002aaaab0f33d3 in _init () from /usr/local/lib64/libLTO.so
#6  0x00002aaaac34a4b0 in ?? ()
#7  0x0000003e9f60d11b in call_init () from /lib64/ld-linux-x86-64.so.2
#8  0x0000003e9f60d225 in _dl_init_internal () from /lib64/ld-linux-x86-64.so.2
#9  0x0000003e9f600a9a in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#10 0x0000000000000001 in ?? ()
#11 0x0000000000000000 in ?? ()

;; 2nd call stack
(gdb) bt
#0  PassInfo (this=0x10378e0, name=0xc75921 "Target Data Layout", arg=0xc75934 "targetdata", pi=17004736, normal=0xada74e <llvm::Pass* llvm::callDefaultCtor<llvm::TargetData>()>, isCFGOnly=false, is_analysis=true) at /home/xliu/dev/llvm/include/llvm/PassSupport.h:59
#1  0x0000000000ada6f1 in RegisterPass (this=0x10378e0, PassArg=0xc75934 "targetdata", Name=0xc75921 "Target Data Layout", CFGOnly=false, is_analysis=true) at /home/xliu/dev/llvm/include/llvm/PassSupport.h:168
#2  0x0000000000ad7df4 in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at TargetData.cpp:36
#3  0x0000000000ad7e47 in global constructors keyed to _ZN4llvm10TargetData2IDE () at TargetData.cpp:604
#4  0x0000000000ae7cf6 in __do_global_ctors_aux ()
#5  0x00000000005f9bfb in _init ()
#6  0x00007fff854b8c98 in ?? ()
#7  0x0000000000ae7c77 in __libc_csu_init ()
#8  0x0000003e9fa1da4e in __libc_start_main () from /lib64/libc.so.6
#9  0x00000000005fb1c9 in _start ()


More information about the llvm-dev mailing list