aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2009-04-13 04:26:06 +0000
committerNick Lewycky <nicholas@mxc.ca>2009-04-13 04:26:06 +0000
commit93f70fc291c56287bff7aefd924d171f005fdcc7 (patch)
treec5f3e34b7e3680a7c47a6b91babe353e9b16f6dc /lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
parentef5facd90de2e6c91a8630b8982e80c709656872 (diff)
downloadexternal_llvm-93f70fc291c56287bff7aefd924d171f005fdcc7.zip
external_llvm-93f70fc291c56287bff7aefd924d171f005fdcc7.tar.gz
external_llvm-93f70fc291c56287bff7aefd924d171f005fdcc7.tar.bz2
Link against libffi if available, fall back to "no external calls from
interpreter mode" when it's not. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68937 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp')
-rw-r--r--lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
index 36de083..160f1ba 100644
--- a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
+++ b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
@@ -33,13 +33,13 @@
#include <cmath>
#include <cstring>
-#ifdef HAVE_FFI
+#ifdef HAVE_FFI_CALL
#ifdef HAVE_FFI_H
#include <ffi.h>
+#define USE_LIBFFI
#elif HAVE_FFI_FFI_H
#include <ffi/ffi.h>
-#else
-#error "Not sure where configure found ffi.h!"
+#define USE_LIBFFI
#endif
#endif
@@ -50,7 +50,7 @@ typedef GenericValue (*ExFunc)(const FunctionType *,
static ManagedStatic<std::map<const Function *, ExFunc> > ExportedFunctions;
static std::map<std::string, ExFunc> FuncNames;
-#ifdef HAVE_FFI
+#ifdef USE_LIBFFI
typedef void (*RawFunc)(void);
static ManagedStatic<std::map<const Function *, RawFunc> > RawFunctions;
#endif
@@ -105,7 +105,7 @@ static ExFunc lookupFunction(const Function *F) {
return FnPtr;
}
-#ifdef HAVE_FFI
+#ifdef USE_LIBFFI
static ffi_type *ffiTypeFor(const Type *Ty) {
switch (Ty->getTypeID()) {
case Type::VoidTyID: return &ffi_type_void;
@@ -240,7 +240,7 @@ static bool ffiInvoke(RawFunc Fn, Function *F,
return false;
}
-#endif // HAVE_FFI
+#endif // USE_LIBFFI
GenericValue Interpreter::callExternalFunction(Function *F,
const std::vector<GenericValue> &ArgVals) {
@@ -253,7 +253,7 @@ GenericValue Interpreter::callExternalFunction(Function *F,
: FI->second)
return Fn(F->getFunctionType(), ArgVals);
-#ifdef HAVE_FFI
+#ifdef USE_LIBFFI
std::map<const Function *, RawFunc>::iterator RF = RawFunctions->find(F);
RawFunc RawFn;
if (RF == RawFunctions->end()) {
@@ -268,7 +268,7 @@ GenericValue Interpreter::callExternalFunction(Function *F,
GenericValue Result;
if (RawFn != 0 && ffiInvoke(RawFn, F, ArgVals, getTargetData(), Result))
return Result;
-#endif // HAVE_FFI
+#endif // USE_LIBFFI
cerr << "Tried to execute an unknown external function: "
<< F->getType()->getDescription() << " " << F->getName() << "\n";