projects
/
m6w6
/
ext-psi
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
|
github
raw
|
patch
|
inline
| side by side (parent:
0e6d6d0
)
workaround for old libffi
author
Michael Wallner
<mike@php.net>
Mon, 4 Jan 2016 20:57:03 +0000
(21:57 +0100)
committer
Michael Wallner
<mike@php.net>
Mon, 4 Jan 2016 20:57:03 +0000
(21:57 +0100)
m4/psi.m4
patch
|
blob
|
history
src/libffi.c
patch
|
blob
|
history
diff --git
a/m4/psi.m4
b/m4/psi.m4
index 4f098514e9a06f88dc27dee7bba4c54c834884fd..eecfa6192a3a57ff1efdae2d7bf61e605781c513 100644
(file)
--- a/
m4/psi.m4
+++ b/
m4/psi.m4
@@
-130,6
+130,10
@@
AC_DEFUN(PSI_CHECK_LIBFFI, [
], [
], -L$psi_cv_libffi_dir/$PHP_LIBDIR)
], -L$psi_cv_libffi_dir/$PHP_LIBDIR)
], [
], -L$psi_cv_libffi_dir/$PHP_LIBDIR)
], -L$psi_cv_libffi_dir/$PHP_LIBDIR)
+ PHP_CHECK_LIBRARY(ffi, ffi_prep_cif_var, [
+ AC_DEFINE(PSI_HAVE_FFI_PREP_CIF_VAR, 1, [ ])
+ ], [
+ ], -L$psi_cv_libffi_dir/$PHP_LIBDIR)
])
dnl PSI_COMPUTE_STR(variable, string or expression)
])
dnl PSI_COMPUTE_STR(variable, string or expression)
diff --git
a/src/libffi.c
b/src/libffi.c
index f776fb7670455cf50a2758ac3fc7f039d5926837..8d41b7a192fa24287bffa03c522821d87bfea015 100644
(file)
--- a/
src/libffi.c
+++ b/
src/libffi.c
@@
-283,10
+283,15
@@
static void psi_ffi_call(PSI_Context *C, decl_callinfo *decl_call, impl_vararg *
params[nfixedargs + i] = psi_ffi_impl_type(va->types[i]);
params[nfixedargs + i + ntotalargs + 1] = &va->values[i];
}
params[nfixedargs + i] = psi_ffi_impl_type(va->types[i]);
params[nfixedargs + i + ntotalargs + 1] = &va->values[i];
}
-
+#ifdef PSI_HAVE_FFI_PREP_CIF_VAR
rc = ffi_prep_cif_var(&signature, call->signature.abi,
nfixedargs, ntotalargs,
call->signature.rtype, (ffi_type **) params);
rc = ffi_prep_cif_var(&signature, call->signature.abi,
nfixedargs, ntotalargs,
call->signature.rtype, (ffi_type **) params);
+#else
+ /* FIXME: test in config.m4; assume we can just call anyway */
+ rc = ffi_prep_cif(&signature, call->signature.abi, ntotalargs,
+ call->signature.rtype, (ffi_type **) params);
+#endif
ZEND_ASSERT(FFI_OK == rc);
ffi_call(&signature, FFI_FN(decl_call->sym), decl_call->rval, ¶ms[ntotalargs + 1]);
free(params);
ZEND_ASSERT(FFI_OK == rc);
ffi_call(&signature, FFI_FN(decl_call->sym), decl_call->rval, ¶ms[ntotalargs + 1]);
free(params);