Fixing problems in lli's RemoteMemoryManager.
authorAndrew Kaylor <andrew.kaylor@intel.com>
Fri, 11 Oct 2013 22:47:10 +0000 (22:47 +0000)
committerAndrew Kaylor <andrew.kaylor@intel.com>
Fri, 11 Oct 2013 22:47:10 +0000 (22:47 +0000)
This fixes a problem from a previous check-in where a return value was omitted.

Previously the remote/stubs-remote.ll and remote/stubs-sm-pic.ll tests were reporting passes, but they should have been failing.  Those tests attempt to link against an external symbol and remote symbol resolution is not supported.  The old RemoteMemoryManager implementation resulted in local symbols being used for resolution and the child process crashed but the test didn't notice.  With this check-in remote symbol resolution fails, and so the test (correctly) fails.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192514 91177308-0d34-0410-b5e6-96231b3b80d8

test/ExecutionEngine/MCJIT/remote/stubs-remote.ll
test/ExecutionEngine/MCJIT/remote/stubs-sm-pic.ll
tools/lli/RemoteMemoryManager.h
tools/lli/lli.cpp

index 99c2fe57f69c374fbdba53dcda06a5a23270c18e..97932bc389ac11e5e8a4806d031f2876360b4b2a 100644 (file)
@@ -1,5 +1,6 @@
 ; RUN: %lli_mcjit -remote-mcjit -disable-lazy-compilation=false -mcjit-remote-process=lli-child-target %s
-; XFAIL:  mips
+; XFAIL: *
+; This test should fail until remote symbol resolution is supported.
 
 define i32 @main() nounwind {
 entry:
index 42e9d77e56982ceddf563a5ee3a17c0794c8bedb..88faf21adb1b705920223542062df90cd281cc36 100644 (file)
@@ -1,5 +1,6 @@
 ; RUN: %lli_mcjit -remote-mcjit -disable-lazy-compilation=false -relocation-model=pic -code-model=small %s
-; XFAIL: mips, i686, i386, aarch64, arm
+; XFAIL: *
+; This function should fail until remote symbol resolution is supported.
 
 define i32 @main() nounwind {
 entry:
index eabe042fff052ad9f71c8bdcb5f48e06d6076469..16d0a808b9bc836c8ec88a0b01c947178ca3906f 100644 (file)
@@ -78,7 +78,7 @@ public:
   // interface does support this, but clients must provide their own
   // mechanism for finding remote symbol addresses.  MCJIT will resolve
   // symbols from Modules it contains.
-  uint64_t getSymbolAddress(const std::string &Name) {}
+  uint64_t getSymbolAddress(const std::string &Name) { return 0; }
 
   void notifyObjectLoaded(ExecutionEngine *EE, const ObjectImage *Obj);
 
index 5578a1da31a4c5b352a243d7c6ef806835693e31..7117707691fdb2a36a1143f0a1c8f830142be68e 100644 (file)
@@ -398,18 +398,18 @@ int main(int argc, char **argv, char * const *envp) {
     return -1;
   }
 
-  // If the program doesn't explicitly call exit, we will need the Exit
-  // function later on to make an explicit call, so get the function now.
-  Constant *Exit = Mod->getOrInsertFunction("exit", Type::getVoidTy(Context),
-                                                    Type::getInt32Ty(Context),
-                                                    NULL);
-
   // Reset errno to zero on entry to main.
   errno = 0;
 
   int Result;
 
   if (!RemoteMCJIT) {
+    // If the program doesn't explicitly call exit, we will need the Exit
+    // function later on to make an explicit call, so get the function now.
+    Constant *Exit = Mod->getOrInsertFunction("exit", Type::getVoidTy(Context),
+                                                      Type::getInt32Ty(Context),
+                                                      NULL);
+
     // Run static constructors.
     if (UseMCJIT && !ForceInterpreter) {
       // Give MCJIT a chance to apply relocations and set page permissions.