[LLVMdev] Getting started with GC

Tom Brown tdbrown at uiuc.edu
Tue Oct 26 14:59:29 PDT 2004


I'm in a group tasked with improving the GC of LLVM for a 421 project.
We are having trouble getting started with the given SemiSpace
collector.

We found the string llvm_gc_initialize called from a single source file
./test/Regression/CodeGen/Generic/GC/alloc_loop.ll
which we tried with the  following... (showing LLVM checked out from cvs a few days ago, similar
output with release 1.3)

$ llvm-as alloc_loop.ll
$ lli alloc_loop.bc
lli: Globals.cpp:81: llvm::GlobalVariable::GlobalVariable(const llvm::Type*, bool, llvm::GlobalValue::LinkageTypes, llvm::Constant*, const std::string&, llvm::Module*): Assertion `Initializer->getType() == Ty && "Initializer should be the same type as the GlobalVariable!"' failed.
lli((anonymous namespace)::PrintStackTrace()+0x1a)[0x857f21a]
lli((anonymous namespace)::SignalHandler(int)+0xcb)[0x857f48d]
[0xffffe420]
lli((anonymous namespace)::LowerGC::doInitialization(llvm::Module&)+0x56d)[0x83ed459]
lli(llvm::PassManagerTraits<llvm::Function>::doInitialization(llvm::Module&)+0x56)[0x84de43a]
lli(llvm::FunctionPass::run(llvm::Function&)+0x4c)[0x848e720]
lli(llvm::FunctionPassManager::run(llvm::Function&)+0xe7)[0x848dcdd]
lli(llvm::JIT::runJITOnFunction(llvm::Function*)+0x4f)[0x8312da7]
lli(llvm::JIT::getPointerToFunction(llvm::Function*)+0x15f)[0x8312f59]
lli(llvm::JIT::runFunction(llvm::Function*, std::vector<llvm::GenericValue, std::allocator<llvm::GenericValue> > const&)+0x4e)[0x8311fc0]
lli(llvm::ExecutionEngine::runFunctionAsMain(llvm::Function*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const* const*)+0x2ef)[0x8369619]
lli(main+0x26c)[0x82f89b0]
/lib/tls/libc.so.6(__libc_start_main+0x108)[0x401307f8]
Aborted

How should we get this to run?



Also the code in runtime/GC/SemiSpace/semispace.c doesn't seem to do
anything other than call process_pointer for every gcroot pointer.

static void process_pointer(void **Root, void *Meta) {
  printf("process_root[0x%p] = 0x%p\n", (void*) Root, (void*) *Root);
}


Are there any examples of LLVM performing active garbage collection?  In
the dev archives
(http://mail.cs.uiuc.edu/pipermail/llvmdev/2004-July/001527.html) Chris
said there are no frontends with GC support, but it might get into Java
first. Where is llvm-java? Google didn't find it in top 10, there is no
llvm-java module in cvs, find -iname java offered no hope.

Do you recommend we stick to llvm assembly for testing GC?

Tom


-- 
28 70 20 71 2C 65 29 61 9C B1 36 3D D4 69 CE 62 4A 22 8B 0E DC 3E
mailto:tdbrown at uiuc.edu
http://thecap.org/




More information about the llvm-dev mailing list