diff options
author | Dan Gohman <gohman@apple.com> | 2008-06-24 00:50:01 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2008-06-24 00:50:01 +0000 |
commit | db7991de7595f1807027e2c385c5127ebf8b6104 (patch) | |
tree | 3540bb4ffb437c45370cfca8b0ee4491880d135e /lib/Target/X86/X86JITInfo.cpp | |
parent | f399235a03e5318804a6833580cd35cbbf9cd4db (diff) | |
download | llvm-db7991de7595f1807027e2c385c5127ebf8b6104.tar.gz llvm-db7991de7595f1807027e2c385c5127ebf8b6104.tar.bz2 llvm-db7991de7595f1807027e2c385c5127ebf8b6104.tar.xz |
Fixes for being compiled PIC on Linux. This isn't the most
general solution possible, but it's a fairly simple one.
Based on a patch from the OpenGTL project!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52662 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86JITInfo.cpp')
-rw-r--r-- | lib/Target/X86/X86JITInfo.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/Target/X86/X86JITInfo.cpp b/lib/Target/X86/X86JITInfo.cpp index 9aff83a5a4..fd495c7588 100644 --- a/lib/Target/X86/X86JITInfo.cpp +++ b/lib/Target/X86/X86JITInfo.cpp @@ -51,6 +51,13 @@ static TargetJITInfo::JITCompilerFn JITCompilerFunction; #define GETASMPREFIX(X) GETASMPREFIX2(X) #define ASMPREFIX GETASMPREFIX(__USER_LABEL_PREFIX__) +// Check if building with -fPIC +#if defined(__PIC__) && __PIC__ && defined(__linux__) +#define ASMCALLSUFFIX "@PLT" +#else +#define ASMCALLSUFFIX +#endif + // Provide a convenient way for disabling usage of CFI directives. // This is needed for old/broken assemblers (for example, gas on // Darwin is pretty old and doesn't support these directives) @@ -112,7 +119,7 @@ extern "C" { // JIT callee "movq %rbp, %rdi\n" // Pass prev frame and return address "movq 8(%rbp), %rsi\n" - "call " ASMPREFIX "X86CompilationCallback2\n" + "call " ASMPREFIX "X86CompilationCallback2" ASMCALLSUFFIX "\n" // Restore all XMM arg registers "movaps 112(%rsp), %xmm7\n" "movaps 96(%rsp), %xmm6\n" @@ -186,7 +193,7 @@ extern "C" { "movl 4(%ebp), %eax\n" // Pass prev frame and return address "movl %eax, 4(%esp)\n" "movl %ebp, (%esp)\n" - "call " ASMPREFIX "X86CompilationCallback2\n" + "call " ASMPREFIX "X86CompilationCallback2" ASMCALLSUFFIX "\n" "movl %ebp, %esp\n" // Restore ESP CFI(".cfi_def_cfa_register %esp\n") "subl $12, %esp\n" @@ -240,7 +247,7 @@ extern "C" { "movl 4(%ebp), %eax\n" // Pass prev frame and return address "movl %eax, 4(%esp)\n" "movl %ebp, (%esp)\n" - "call " ASMPREFIX "X86CompilationCallback2\n" + "call " ASMPREFIX "X86CompilationCallback2" ASMCALLSUFFIX "\n" "addl $16, %esp\n" "movaps 48(%esp), %xmm3\n" CFI(".cfi_restore %xmm3\n") |