[vmkit-commits] [vmkit] r61987 - /vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Fri Jan 9 03:49:29 PST 2009


Author: geoffray
Date: Fri Jan  9 05:49:21 2009
New Revision: 61987

URL: http://llvm.org/viewvc/llvm-project?rev=61987&view=rev
Log:
Fix linkage of global variables.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=61987&r1=61986&r2=61987&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Fri Jan  9 05:49:21 2009
@@ -155,7 +155,7 @@
         const llvm::Type* Ty = JavaClassArrayType; 
       
         GlobalVariable* varGV = 
-          new GlobalVariable(Ty, false, GlobalValue::ExternalLinkage,
+          new GlobalVariable(Ty, false, GlobalValue::InternalLinkage,
                              Constant::getNullValue(Ty), "", this);
       
         arrayClasses.insert(std::make_pair((ClassArray*)classDef, varGV));
@@ -182,9 +182,10 @@
     constant_pool_iterator End = constantPools.end();
     constant_pool_iterator I = constantPools.find(ctp);
     if (I == End) {
-      varGV = new GlobalVariable(ConstantPoolType->getContainedType(0), false,
-                                 GlobalValue::ExternalLinkage,
-                                 0, "", this);
+      const Type* Ty = ConstantPoolType->getContainedType(0);
+      varGV = new GlobalVariable(Ty, false,
+                                 GlobalValue::InternalLinkage,
+                                 Constant::getNullValue(Ty), "", this);
       constantPools.insert(std::make_pair(ctp, varGV));
       return varGV;
     } else {
@@ -244,7 +245,7 @@
       const llvm::Type* Ty = LCI->getVirtualType();
       GlobalVariable* varGV = 
         new GlobalVariable(Ty->getContainedType(0), false,
-                           GlobalValue::ExternalLinkage,
+                           GlobalValue::InternalLinkage,
                            0, "", this);
       Constant* res = ConstantExpr::getCast(Instruction::BitCast, varGV,
                                             JavaObjectType);
@@ -269,7 +270,7 @@
     } else {
       GlobalVariable* varGV = 
         new GlobalVariable(EnveloppeType->getContainedType(0), false,
-                           GlobalValue::ExternalLinkage, 0, "", this);
+                           GlobalValue::InternalLinkage, 0, "", this);
       enveloppes.insert(std::make_pair(enveloppe, varGV));
       
       Constant* C = CreateConstantFromEnveloppe(enveloppe);
@@ -295,7 +296,7 @@
       
       GlobalVariable* varGV = 
         new GlobalVariable(Ty->getContainedType(0), false,
-                           GlobalValue::ExternalLinkage, 0, "", this);
+                           GlobalValue::InternalLinkage, 0, "", this);
       
       Constant* res = ConstantExpr::getCast(Instruction::BitCast, varGV,
                                             JavaObjectType);
@@ -542,8 +543,8 @@
   }
   
   Function* func = Function::Create(JnjvmModule::MarkAndTraceType,
-                                    GlobalValue::ExternalLinkage,
-                                    "markAndTraceObject",
+                                    GlobalValue::InternalLinkage,
+                                    "",
                                     this);
 
   Constant* zero = mvm::MvmModule::constantZero;
@@ -1228,7 +1229,7 @@
   if (I == End) {
     Constant* C = CreateConstantFromUTF8(val);
     GlobalVariable* varGV = new GlobalVariable(C->getType(), true,
-                                               GlobalValue::ExternalLinkage,
+                                               GlobalValue::InternalLinkage,
                                                C, "", this);
     
     Constant* res = ConstantExpr::getCast(Instruction::BitCast, varGV,
@@ -1496,8 +1497,16 @@
       char* buf = (char*)alloca(3 + JNI_NAME_PRE_LEN + 1 +
                                 ((mnlen + clen + mtlen) << 1));
       
-      methodDef->jniConsFromMethOverloaded(buf + 1);
-      memcpy(buf, "JnJVM", 5);
+      bool jnjvm = false;
+      if (isNative(methodDef->access)) {
+        // Verify if it's defined by JnJVM
+        JCL->nativeLookup(methodDef, jnjvm, buf);
+      }
+
+      if (!jnjvm) {
+        methodDef->jniConsFromMethOverloaded(buf + 1);
+        memcpy(buf, "JnJVM", 5);
+      }
 
       methodFunction = Function::Create(getFunctionType(), 
                                         GlobalValue::GhostLinkage, buf, Mod);
@@ -1645,7 +1654,7 @@
 
   Function* res = Function::Create(virt ? getVirtualBufType() : 
                                           getStaticBufType(),
-                                   GlobalValue::ExternalLinkage, name, Mod);
+                                   GlobalValue::InternalLinkage, name, Mod);
   
   BasicBlock* currentBlock = BasicBlock::Create("enter", res);
   Function::arg_iterator i = res->arg_begin();
@@ -1703,7 +1712,7 @@
 
   Function* res = Function::Create(virt ? getVirtualBufType() :
                                           getStaticBufType(),
-                                   GlobalValue::ExternalLinkage, name, Mod);
+                                   GlobalValue::InternalLinkage, name, Mod);
   
   BasicBlock* currentBlock = BasicBlock::Create("enter", res);
   Function::arg_iterator i = res->arg_begin();
@@ -2324,12 +2333,6 @@
 
 void JnjvmModule::CreateStaticInitializer() {
 
-  // Set the linkage of all functions to External, so that the printer does
-  // not complain.
-  for (Module::iterator i = begin(), e = end(); i != e; ++i) {
-    i->setLinkage(GlobalValue::ExternalLinkage);
-  }
-
   std::vector<const llvm::Type*> llvmArgs;
   llvmArgs.push_back(ptrType); // class loader
   llvmArgs.push_back(JavaCommonClassType); // cl





More information about the vmkit-commits mailing list