[llvm-commits] [poolalloc] r76618 - /poolalloc/trunk/lib/PoolAllocate/PAMultipleGlobalPool.cpp

Haohui Mai mai4 at uiuc.edu
Tue Jul 21 11:57:48 PDT 2009


Author: mai4
Date: Tue Jul 21 13:57:48 2009
New Revision: 76618

URL: http://llvm.org/viewvc/llvm-project?rev=76618&view=rev
Log:
Put __poolalloc_init() in llvm.used so it won't get killed.

Modified:
    poolalloc/trunk/lib/PoolAllocate/PAMultipleGlobalPool.cpp

Modified: poolalloc/trunk/lib/PoolAllocate/PAMultipleGlobalPool.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/PAMultipleGlobalPool.cpp?rev=76618&r1=76617&r2=76618&view=diff

==============================================================================
--- poolalloc/trunk/lib/PoolAllocate/PAMultipleGlobalPool.cpp (original)
+++ poolalloc/trunk/lib/PoolAllocate/PAMultipleGlobalPool.cpp Tue Jul 21 13:57:48 2009
@@ -339,6 +339,20 @@
     (FunctionType::get(Type::VoidTy, std::vector<const Type*>(), false),
     GlobalValue::ExternalLinkage, "__poolalloc_init", &M);
 
+  // put it into llvm.used so that it won't get killed.
+
+  Type * VoidPtrTy = PointerType::getUnqual(Type::Int8Ty);
+  ArrayType * LLVMUsedTy = ArrayType::get(VoidPtrTy, 1);
+  Constant * C = ConstantExpr::getBitCast (cast<Constant>(InitFunc), VoidPtrTy);
+  std::vector<Constant*> UsedFunctions(1,C);
+  Constant * NewInit = 
+    ConstantArray::get (LLVMUsedTy, UsedFunctions);
+
+  new GlobalVariable (M, LLVMUsedTy, false,
+      GlobalValue::AppendingLinkage,
+      NewInit, "llvm.used");
+
+
   BasicBlock * BB = BasicBlock::Create("entry", InitFunc);
   
   SteensgaardDataStructures * DS = dynamic_cast<SteensgaardDataStructures*>(Graphs);





More information about the llvm-commits mailing list