Skip to content

Commit

Permalink
MCJIT-remote: __main should be resolved in child context.
Browse files Browse the repository at this point in the history
  - Mark tests as XFAIL:cygming in test/ExecutionEngine/MCJIT/remote.
    Rather to suppress them, I'd like to leave them running as XFAIL.
  - Revert r193472. RecordMemoryManager no longer resolves __main on cygming.

There are a couple of issues.

  - X86 Codegen emits "call __main" in @main for targeting cygming.
    It is useless in JIT. FYI, tests are passing when emitting __main is disabled.
  - Current remote JIT does not resolve any symbols in child context.

FIXME: __main should be disabled, or remote JIT should resolve __main.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193498 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
chapuni committed Oct 27, 2013
1 parent 62d66cb commit f61049b
Show file tree
Hide file tree
Showing 10 changed files with 25 additions and 22 deletions.
3 changes: 3 additions & 0 deletions test/ExecutionEngine/MCJIT/remote/cross-module-a.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
; RUN: %lli_mcjit -extra-modules=%p/cross-module-b.ir -disable-lazy-compilation=true -remote-mcjit -mcjit-remote-process=lli-child-target %s > /dev/null

; This fails because __main is not resolved in remote mcjit.
; XFAIL: cygwin,mingw32

declare i32 @FB()

define i32 @FA() {
Expand Down
3 changes: 3 additions & 0 deletions test/ExecutionEngine/MCJIT/remote/multi-module-a.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
; RUN: %lli_mcjit -extra-modules=%p/multi-module-b.ir,%p/multi-module-c.ir -disable-lazy-compilation=true -remote-mcjit -mcjit-remote-process=lli-child-target %s > /dev/null

; This fails because __main is not resolved in remote mcjit.
; XFAIL: cygwin,mingw32

declare i32 @FB()

define i32 @main() {
Expand Down
4 changes: 3 additions & 1 deletion test/ExecutionEngine/MCJIT/remote/simpletest-remote.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
; RUN: %lli_mcjit -remote-mcjit -mcjit-remote-process=lli-child-target %s > /dev/null
; XFAIL: mips

; This fails because __main is not resolved in remote mcjit on cygming.
; XFAIL: cygwin,mingw32,mips

define i32 @bar() {
ret i32 0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
; RUN: %lli_mcjit -remote-mcjit -O0 -disable-lazy-compilation=false -mcjit-remote-process=lli-child-target %s
; XFAIL: mips

; This fails because __main is not resolved in remote mcjit on cygming.
; XFAIL: cygwin,mingw32,mips

; The intention of this test is to verify that symbols mapped to COMMON in ELF
; work as expected.
Expand Down
4 changes: 3 additions & 1 deletion test/ExecutionEngine/MCJIT/remote/test-data-align-remote.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
; RUN: %lli_mcjit -remote-mcjit -O0 -mcjit-remote-process=lli-child-target %s
; XFAIL: mips

; This fails because __main is not resolved in remote mcjit on cygming.
; XFAIL: cygwin,mingw32,mips

; Check that a variable is always aligned as specified.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
; RUN: %lli_mcjit -remote-mcjit -mcjit-remote-process=lli-child-target %s > /dev/null
; XFAIL: mips

; This fails because __main is not resolved in remote mcjit on cygming.
; XFAIL: cygwin,mingw32,mips

define double @test(double* %DP, double %Arg) {
%D = load double* %DP ; <double> [#uses=1]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
; RUN: %lli_mcjit -remote-mcjit -mcjit-remote-process=lli-child-target %s > /dev/null
; XFAIL: mips

; This fails because __main is not resolved in remote mcjit on cygming.
; XFAIL: cygwin,mingw32,mips

@count = global i32 1, align 4

Expand Down
3 changes: 3 additions & 0 deletions test/ExecutionEngine/MCJIT/remote/test-ptr-reloc-remote.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
; RUN: %lli_mcjit -remote-mcjit -O0 -mcjit-remote-process=lli-child-target %s

; This fails because __main is not resolved in remote mcjit.
; XFAIL: cygwin,mingw32

@.str = private unnamed_addr constant [6 x i8] c"data1\00", align 1
@ptr = global i8* getelementptr inbounds ([6 x i8]* @.str, i32 0, i32 0), align 4
@.str1 = private unnamed_addr constant [6 x i8] c"data2\00", align 1
Expand Down
16 changes: 0 additions & 16 deletions tools/lli/RemoteMemoryManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -204,19 +204,3 @@ uint8_t *RemoteMemoryManager::allocateGlobal(uintptr_t Size, unsigned Alignment)
void RemoteMemoryManager::deallocateFunctionBody(void *Body) {
llvm_unreachable("Unexpected!");
}

static int jit_noop() {
return 0;
}

uint64_t RemoteMemoryManager::getSymbolAddress(const std::string &Name) {
// We should not invoke parent's ctors/dtors from generated main()!
// On Mingw and Cygwin, the symbol __main is resolved to
// callee's(eg. tools/lli) one, to invoke wrong duplicated ctors
// (and register wrong callee's dtors with atexit(3)).
// We expect ExecutionEngine::runStaticConstructorsDestructors()
// is called before ExecutionEngine::runFunctionAsMain() is called.
if (Name == "__main") return (uintptr_t)&jit_noop;

return 0;
}
2 changes: 1 addition & 1 deletion tools/lli/RemoteMemoryManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class RemoteMemoryManager : public JITMemoryManager {
// 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);

Expand Down

0 comments on commit f61049b

Please sign in to comment.