[LLVMdev] Fw: LLVM GC

Samuel Crow samuraileumas at yahoo.com
Fri Jan 14 17:33:59 PST 2011


Forgot to CC the list.


----- Forwarded Message ----
> From: Samuel Crow <samuraileumas at yahoo.com>
> To: Trevor Elliott <trevor at galois.com>
> Sent: Fri, January 14, 2011 7:33:15 PM
> Subject: Re: [LLVMdev] LLVM GC
> 
> Hi Trevor,
> 
> Are you linking with LibStdC++ or LibC++?  That is a  requirement for running 
> code that has been compiled from C++ to  bitcode.
> 
> Hope this helps,
> 
> --Sam Crow
> 
> 
> ----- Original  Message ----
> > From: Trevor Elliott <trevor at galois.com>
> > To: llvmdev at cs.uiuc.edu
> > Sent: Fri,  January 14, 2011 7:17:30 PM
> > Subject: [LLVMdev] LLVM GC
> > 
> >  Hi,
> > 
> > I've been implementing a compiler that targets LLVM, and  was  looking
> > into using the shadow-stack gc strategy.   Currently, I build the  runtime
> > with clang (using -emit-llvm), and  then link that with the LLVM  bitcode
> > output from my compiler using  llvm-ld.
> > 
> > This works fine without  the gc strategy  annotations and use of the
> > llvm.gcroot intrinsic, but adding  them  causes some odd behavior: the
> > resulting bitcode will generate a  large  stack trace from lli (appended
> > at the end of this message),  and the resulting  native assembly,
> > generated with llc, will never  update my llvm_gc_root_chain  global.
> > 
> > Interestingly, if I  build my runtime with g++, or clang  without
> > -emit-llvm, and link  everything together after generating  native
> > assembly from the  output of my compiler, it works.  The stack  roots get
> >  registered, and the llvm_gc_root_chain global gets  updated.
> > 
> > Is linking in the runtime as an LLVM bitcode object something   that I
> > should expect to work, or does it make more sense to build  the  runtime
> > for the target, and not try to emit LLVM bitcode  programs from my  
compiler?
> > 
> > Thanks!
> > 
> >  --trevor
> > 
> > 
> > 0  libLLVM-2.8.so    0x0000003cc36eee9f
> > 1  libLLVM-2.8.so   0x0000003cc36ef99a
> > 2  libpthread.so.0  0x0000003cc200f4a0
> >  3  libLLVM-2.8.so   0x0000003cc33360dd
> >  llvm::StructType::StructType(llvm::LLVMContext&,   std::vector<llvm::Type
> > const*, std::allocator<llvm::Type  const*>  > const&, bool) + 237
> > 4   libLLVM-2.8.so   0x0000003cc3337c95
> >  llvm::StructType::get(llvm::LLVMContext&,  std::vector<llvm::Type  const*,
> > std::allocator<llvm::Type const*>  > const&,  bool) + 533
> > 5  libLLVM-2.8.so   0x0000003cc3242d58
> >  6  libLLVM-2.8.so  0x0000003cc318f09e
> > 7    libLLVM-2.8.so   0x0000003cc3330628
> >  llvm::FPPassManager::runOnFunction(llvm::Function&) +  424
> >  8  libLLVM-2.8.so   0x0000003cc33307cb
> >  llvm::FunctionPassManagerImpl::run(llvm::Function&) +  91
> >  9  libLLVM-2.8.so   0x0000003cc33309bd
> >  llvm::FunctionPassManager::run(llvm::Function&) +  173
> > 10  libLLVM-2.8.so   0x0000003cc33e8647
> >  llvm::JIT::jitTheFunction(llvm::Function*,  llvm::MutexGuard const&) +  39
> > 11 libLLVM-2.8.so   0x0000003cc33e8a2f
> >  llvm::JIT::runJITOnFunctionUnlocked(llvm::Function*,   llvm::MutexGuard
> > const&) + 15
> > 12 libLLVM-2.8.so    0x0000003cc33e8cde
> > llvm::JIT::getPointerToFunction(llvm::Function*)  +  606
> > 13 libLLVM-2.8.so   0x0000003cc33ea253
> >  llvm::JIT::runFunction(llvm::Function*,   std::vector<llvm::GenericValue,
> >  std::allocator<llvm::GenericValue>  > const&) + 67
> > 14  libLLVM-2.8.so   0x0000003cc336ad4a
> >  llvm::ExecutionEngine::runFunctionAsMain(llvm::Function*,
> >  std::vector<std::string,  std::allocator<std::string> >  const&, char
> > const* const*) +  1130
> > 15 lli              0x0000000000404cd6 main  + 2054
> > 16 libc.so.6         0x0000003cc1c1ec5d __libc_start_main + 253
> > 17 lli               0x0000000000403689
> > Stack dump:
> >  0.     Program arguments: lli test.bc
> > 1.    Running  pass 'Lower  Garbage Collection Instructions' on function 
> '@main'
> > zsh: segmentation fault  (core dumped)   ./test
> > 
> > 
> 
> 
>       
> 


      



More information about the llvm-dev mailing list