[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Support compiling without support for mmap()
From: |
Paul Cercueil |
Subject: |
[PATCH] Support compiling without support for mmap() |
Date: |
Thu, 26 May 2022 23:47:23 +0100 |
Some platforms don't provide functions to map memory. On these
platforms, Lightning can still be used, with user-provided code buffers.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
configure.ac | 2 +-
lib/jit_memory.c | 1 -
lib/lightning.c | 20 +++++++++++++++++++-
3 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/configure.ac b/configure.ac
index 2ad0167..5b582d2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -63,7 +63,7 @@ case "$target_cpu" in
*) ;;
esac
-AC_CHECK_FUNCS(mremap ffsl getopt_long_only isnan isinf,,)
+AC_CHECK_FUNCS(mmap mremap ffsl getopt_long_only isnan isinf,,)
AC_CHECK_HEADERS([getopt.h stdint.h],,,)
diff --git a/lib/jit_memory.c b/lib/jit_memory.c
index 4d7f92d..d1e3a14 100644
--- a/lib/jit_memory.c
+++ b/lib/jit_memory.c
@@ -19,7 +19,6 @@
#include <lightning.h>
#include <lightning/jit_private.h>
-#include <sys/mman.h>
/*
* Prototypes
diff --git a/lib/lightning.c b/lib/lightning.c
index 11f4069..b78bd07 100644
--- a/lib/lightning.c
+++ b/lib/lightning.c
@@ -19,7 +19,9 @@
#include <lightning.h>
#include <lightning/jit_private.h>
-#include <sys/mman.h>
+#if HAVE_MMAP
+# include <sys/mman.h>
+#endif
#if defined(__sgi)
# include <fcntl.h>
#endif
@@ -956,10 +958,12 @@ _jit_destroy_state(jit_state_t *_jit)
#if DEVEL_DISASSEMBLER
jit_really_clear_state();
#endif
+#if HAVE_MMAP
if (!_jit->user_code)
munmap(_jit->code.ptr, _jit->code.length);
if (!_jit->user_data)
munmap(_jit->data.ptr, _jit->data.length);
+#endif
jit_free((jit_pointer_t *)&_jit);
}
@@ -1895,6 +1899,9 @@ _jit_dataset(jit_state_t *_jit)
#endif
assert(!_jitc->dataset);
+#if !HAVE_MMAP
+ assert(_jit->user_data);
+#else
if (!_jit->user_data) {
/* create read only data buffer */
@@ -1912,6 +1919,7 @@ _jit_dataset(jit_state_t *_jit)
close(mmap_fd);
#endif
}
+#endif /* !HAVE_MMAP */
if (!_jitc->no_data)
jit_memcpy(_jit->data.ptr, _jitc->data.ptr, _jitc->data.offset);
@@ -2026,6 +2034,9 @@ _jit_emit(jit_state_t *_jit)
_jitc->emit = 1;
+#if !HAVE_MMAP
+ assert(_jit->user_code);
+#else
if (!_jit->user_code) {
#if defined(__sgi)
mmap_fd = open("/dev/zero", O_RDWR);
@@ -2035,6 +2046,7 @@ _jit_emit(jit_state_t *_jit)
MAP_PRIVATE | MAP_ANON, mmap_fd, 0);
assert(_jit->code.ptr != MAP_FAILED);
}
+#endif /* !HAVE_MMAP */
_jitc->code.end = _jit->code.ptr + _jit->code.length -
jit_get_max_instr();
_jit->pc.uc = _jit->code.ptr;
@@ -2048,6 +2060,9 @@ _jit_emit(jit_state_t *_jit)
node->code == jit_code_epilog))
node->flag &= ~jit_flag_patch;
}
+#if !HAVE_MMAP
+ assert(_jit->user_code);
+#else
if (_jit->user_code)
goto fail;
#if GET_JIT_SIZE
@@ -2081,6 +2096,7 @@ _jit_emit(jit_state_t *_jit)
_jitc->code.end = _jit->code.ptr + _jit->code.length -
jit_get_max_instr();
_jit->pc.uc = _jit->code.ptr;
+#endif /* !HAVE_MMAP */
}
else
break;
@@ -2097,6 +2113,7 @@ _jit_emit(jit_state_t *_jit)
if (_jit->user_data)
jit_free((jit_pointer_t *)&_jitc->data.ptr);
+#if HAVE_MMAP
else {
result = mprotect(_jit->data.ptr, _jit->data.length, PROT_READ);
assert(result == 0);
@@ -2106,6 +2123,7 @@ _jit_emit(jit_state_t *_jit)
PROT_READ | PROT_EXEC);
assert(result == 0);
}
+#endif /* HAVE_MMAP */
return (_jit->code.ptr);
fail:
--
2.35.1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] Support compiling without support for mmap(),
Paul Cercueil <=