Let target resolve some relocation results.
authorEvan Cheng <evan.cheng@apple.com>
Wed, 29 Oct 2008 23:54:46 +0000 (23:54 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 29 Oct 2008 23:54:46 +0000 (23:54 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58407 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/JIT/JITEmitter.cpp

index 44e6638562c123e00079c9efec11c8b1a5cf3b7e..73346fe99e53e969d655505c201a28184939154d 100644 (file)
@@ -876,30 +876,32 @@ bool JITEmitter::finishFunction(MachineFunction &F) {
     for (unsigned i = 0, e = Relocations.size(); i != e; ++i) {
       MachineRelocation &MR = Relocations[i];
       void *ResultPtr;
-      if (MR.isString()) {
-        ResultPtr = TheJIT->getPointerToNamedFunction(MR.getString());
-
-        // If the target REALLY wants a stub for this function, emit it now.
-        if (!MR.doesntNeedStub())
-          ResultPtr = Resolver.getExternalFunctionStub(ResultPtr);
-      } else if (MR.isGlobalValue()) {
-        ResultPtr = getPointerToGlobal(MR.getGlobalValue(),
-                                       BufferBegin+MR.getMachineCodeOffset(),
-                                       MR.doesntNeedStub());
-      } else if (MR.isGlobalValueLazyPtr()) {
-        ResultPtr = getPointerToGVLazyPtr(MR.getGlobalValue(),
+      if (!MR.letTargetResolve()) {
+        if (MR.isString()) {
+          ResultPtr = TheJIT->getPointerToNamedFunction(MR.getString());
+
+          // If the target REALLY wants a stub for this function, emit it now.
+          if (!MR.doesntNeedStub())
+            ResultPtr = Resolver.getExternalFunctionStub(ResultPtr);
+        } else if (MR.isGlobalValue()) {
+          ResultPtr = getPointerToGlobal(MR.getGlobalValue(),
+                                         BufferBegin+MR.getMachineCodeOffset(),
+                                         MR.doesntNeedStub());
+        } else if (MR.isGlobalValueLazyPtr()) {
+          ResultPtr = getPointerToGVLazyPtr(MR.getGlobalValue(),
                                           BufferBegin+MR.getMachineCodeOffset(),
                                           MR.doesntNeedStub());
-      } else if (MR.isBasicBlock()) {
-        ResultPtr = (void*)getMachineBasicBlockAddress(MR.getBasicBlock());
-      } else if (MR.isConstantPoolIndex()) {
-        ResultPtr=(void*)getConstantPoolEntryAddress(MR.getConstantPoolIndex());
-      } else {
-        assert(MR.isJumpTableIndex());
-        ResultPtr=(void*)getJumpTableEntryAddress(MR.getJumpTableIndex());
-      }
+        } else if (MR.isBasicBlock()) {
+          ResultPtr = (void*)getMachineBasicBlockAddress(MR.getBasicBlock());
+        } else if (MR.isConstantPoolIndex()) {
+          ResultPtr = (void*)getConstantPoolEntryAddress(MR.getConstantPoolIndex());
+        } else {
+          assert(MR.isJumpTableIndex());
+          ResultPtr=(void*)getJumpTableEntryAddress(MR.getJumpTableIndex());
+        }
 
-      MR.setResultPointer(ResultPtr);
+        MR.setResultPointer(ResultPtr);
+      }
 
       // if we are managing the GOT and the relocation wants an index,
       // give it one
@@ -1011,11 +1013,6 @@ void* JITEmitter::allocateSpace(intptr_t Size, unsigned Alignment) {
 }
 
 void JITEmitter::emitConstantPool(MachineConstantPool *MCP) {
-  if (TheJIT->getJITInfo().hasCustomConstantPool()) {
-    DOUT << "JIT: Target has custom constant pool handling. Omitting standard "
-            "constant pool\n";
-    return;
-  }
   const std::vector<MachineConstantPoolEntry> &Constants = MCP->getConstants();
   if (Constants.empty()) return;
 
@@ -1129,10 +1126,6 @@ void *JITEmitter::finishFunctionStub(const GlobalValue* F) {
 // method.
 //
 intptr_t JITEmitter::getConstantPoolEntryAddress(unsigned ConstantNum) const {
-  if (TheJIT->getJITInfo().hasCustomConstantPool()) {
-    return TheJIT->getJITInfo().getCustomConstantPoolEntryAddress(ConstantNum);
-  }
-
   assert(ConstantNum < ConstantPool->getConstants().size() &&
          "Invalid ConstantPoolIndex!");
   return (intptr_t)ConstantPoolBase +