summaryrefslogtreecommitdiff
path: root/unix/alloc.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-06-18 00:18:01 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-06-18 00:18:01 +0300
commitc9598604c6872d87b6c818c92efc4bce357d988c (patch)
tree36f9d0f2b9858594780b9901466e171055869008 /unix/alloc.c
parent9b43a7d1be2cf79b85d36f7f51dd9edd8d39fdda (diff)
unix/alloc: Add option to use uPy's alloc-exec implementation even for libffi.
When built for Linux, libffi includes very bloated and workaround exec-alloc implementation required to work around SELinux and other "sekuritee" features which real people don't use. MicroPython has own alloc-exec implementation, used to alloc memory for @micropython.native code. With this option enabled, uPy's implementation will override libffi's. This saves 11K on x86_64 (and that accounts for more than half of the libffi code size). TODO: Possibly, we want to refactor this option to allow either use uPy's implementation even for libffi, or allow to use libffi's implementation even for uPy.
Diffstat (limited to 'unix/alloc.c')
-rw-r--r--unix/alloc.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/unix/alloc.c b/unix/alloc.c
index a0676a0ae..72b9d2a87 100644
--- a/unix/alloc.c
+++ b/unix/alloc.c
@@ -33,7 +33,7 @@
#include "py/mpstate.h"
#include "py/gc.h"
-#if MICROPY_EMIT_NATIVE
+#if MICROPY_EMIT_NATIVE || (MICROPY_PY_FFI && MICROPY_FORCE_PLAT_ALLOC_EXEC)
#if defined(__OpenBSD__) || defined(__MACH__)
#define MAP_ANONYMOUS MAP_ANON
@@ -85,4 +85,16 @@ void mp_unix_mark_exec(void) {
}
}
-#endif // MICROPY_EMIT_NATIVE
+#if MICROPY_FORCE_PLAT_ALLOC_EXEC
+void *ffi_closure_alloc(size_t size, void **code) {
+ mp_uint_t dummy;
+ mp_unix_alloc_exec(size, code, &dummy);
+ return *code;
+}
+
+void ffi_closure_free(void *ptr) {
+ // TODO
+}
+#endif
+
+#endif // MICROPY_EMIT_NATIVE || (MICROPY_PY_FFI && MICROPY_FORCE_PLAT_ALLOC_EXEC)