[llvm-commits] [llvm] r68937 - in /llvm/trunk: Makefile.config.in autoconf/configure.ac lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp

Nick Lewycky nicholas at mxc.ca
Sun Apr 12 21:26:06 PDT 2009


Author: nicholas
Date: Sun Apr 12 23:26:06 2009
New Revision: 68937

URL: http://llvm.org/viewvc/llvm-project?rev=68937&view=rev
Log:
Link against libffi if available, fall back to "no external calls from
interpreter mode" when it's not.

Modified:
    llvm/trunk/Makefile.config.in
    llvm/trunk/autoconf/configure.ac
    llvm/trunk/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp

Modified: llvm/trunk/Makefile.config.in
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.config.in?rev=68937&r1=68936&r2=68937&view=diff

==============================================================================
--- llvm/trunk/Makefile.config.in (original)
+++ llvm/trunk/Makefile.config.in Sun Apr 12 23:26:06 2009
@@ -289,6 +289,3 @@
 
 # Location of the plugin header file for gold.
 BINUTILS_INCDIR := @BINUTILS_INCDIR@
-
-# Can we use libFFI for the interpreter?
-HAVE_FFI := @HAVE_FFI@

Modified: llvm/trunk/autoconf/configure.ac
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/autoconf/configure.ac?rev=68937&r1=68936&r2=68937&view=diff

==============================================================================
--- llvm/trunk/autoconf/configure.ac (original)
+++ llvm/trunk/autoconf/configure.ac Sun Apr 12 23:26:06 2009
@@ -737,8 +737,9 @@
                AC_MSG_WARN([dlopen() not found - disabling plugin support]))
 
 dnl libffi is optional; used to call external functions from the interpreter
-AC_CHECK_LIB(ffi,ffi_call,[have_libffi=1],
-             AC_MSG_WARN([libffi not found - disabling external calls from interpreter]))
+AC_SEARCH_LIBS(ffi_call,ffi,AC_DEFINE([HAVE_FFI_CALL],[1],
+               [Define if libffi is available on this platform.]),
+               AC_MSG_WARN([libffi not found - disabling external calls from interpreter]))
 
 dnl mallinfo is optional; the code can compile (minus features) without it
 AC_SEARCH_LIBS(mallinfo,malloc,AC_DEFINE([HAVE_MALLINFO],[1],
@@ -802,10 +803,8 @@
   AC_SUBST(HAVE_PTHREAD, 0)
 fi
 
-dnl Once we know we have libffi, try to find ffi.h.
-if test -n "$have_libffi" ; then
-  AC_CHECK_HEADERS([ffi.h ffi/ffi.h], [AC_SUBST(HAVE_FFI, 1)])
-fi  
+dnl Try to find ffi.h.
+AC_CHECK_HEADERS([ffi.h ffi/ffi.h])
 
 dnl===-----------------------------------------------------------------------===
 dnl===

Modified: llvm/trunk/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp?rev=68937&r1=68936&r2=68937&view=diff

==============================================================================
--- llvm/trunk/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp Sun Apr 12 23:26:06 2009
@@ -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 @@
 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 @@
   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 @@
 
   return false;
 }
-#endif // HAVE_FFI
+#endif // USE_LIBFFI
 
 GenericValue Interpreter::callExternalFunction(Function *F,
                                      const std::vector<GenericValue> &ArgVals) {
@@ -253,7 +253,7 @@
                                                    : 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 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";





More information about the llvm-commits mailing list