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.
This commit is contained in:
16
unix/alloc.c
16
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)
|
||||
|
||||
Reference in New Issue
Block a user