diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2021-08-22 20:39:25 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2021-08-22 20:39:25 -0700 |
commit | a37665e615c504415d5425f71ce5af7b7175b3f2 (patch) | |
tree | a78c05024c377578245e9b7d5b7d2f399091f45f /configure | |
parent | f88ab97c627291952ca39a6cdada6c923caed0a4 (diff) | |
download | txr-a37665e615c504415d5425f71ce5af7b7175b3f2.tar.gz txr-a37665e615c504415d5425f71ce5af7b7175b3f2.tar.bz2 txr-a37665e615c504415d5425f71ce5af7b7175b3f2.zip |
ffi: provide mmap through carray.
* configure: configure test for mmap depositing HAVE_MMAP into
config.h.
* ffi.c (struct carray): Subject to HAVE_MMAP, new mm_len
member which keeps track of the size of an underlying mapping
so that we can unmap it, as well as peform operations like
msync on it.
(make_carray): Initialize mm_len to 0.
(MAP_GROWSDOWN, MAP_LOCKED, MAP_NORESERVE, MAP_POPULATE,
MAP_NONBLOCK, MAP_STACK, MAP_HUGETLB, MAP_SHARED, MAP_PRIVATE,
MAP_FIXED, MAP_ANON, MAP_HUGE_SHIFT, MAP_HUGE_MASK, PROT_READ,
PROT_WRITE, PROT_EXEC, PROT_NONE, PROT_GROWSDOWN,
PROT_GROWSUP, MADV_NORMAL, MADV_RANDOM, MADV_SEQUENTIAL,
MADV_WILLNEED, MADV_DONTNEED, MADV_FREE, MADV_REMOVE,
MADV_DONTFORK, MADV_DOFORK, MADV_MERGEABLE, MADV_UNMERGEABLE,
MADV_HUGEPAGE, MADV_NOHUGEPAGE, MADV_DONTDUMP, MADV_DODUMP,
MADV_WIPEONFORK, MADV_KEEPONFORK, MADV_HWPOISON, MS_ASYNC,
MS_SYNC, MS_INVALIDATE): #define as 0 if missing.
(carray_munmap_op): New static function.
(carray_mmap_ops): New static structure.
(mmap_wrap, munmap_wrap): New functions.
(mmap_op): New static function.
(mprotect_wrap, madvise_wrap, msync_wrap): New functions.
(ffi_init): Register mmap, munmap, mprotect, madvise and msync
as well as numerous integer variables: map-growsdown,
map-locked, map-noreserve, map-populate, map-nonblock,
map-stack, map-hugetlb, map-shared, map-private, map-fixed,
map-anon, map-huge-shift, map-huge-mask, prot-read,
prot-write, prot-exec, prot-none, prot-growsdown,
prot-growsup, madv-normal, madv-random, madv-sequential,
madv-willneed, madv-dontneed, madv-free, madv-remove,
madv-dontfork, madv-dofork, madv-mergeable, madv-unmergeable,
madv-hugepage, madv-nohugepage, madv-dontdump, madv-dodump,
madv-wipeonfork, madv-keeponfork, madv-hwpoison, ms-async,
ms-sync, ms-invalidate, page-size.
* ffi.h (mmap_wrap, munmap_wrap, mprotect_wrap madvise_wrap,
msync_wrap): Declared.
* tests/017/mmap.tl: New file.
* txr.1: Documented.
* stdlib/doc-syms.tl: Updated.
Diffstat (limited to 'configure')
-rwxr-xr-x | configure | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -3781,6 +3781,35 @@ else printf "no\n" fi +printf "Checking for mmap ... " +cat > conftest.c <<! +#include <sys/mman.h> +#include <unistd.h> +#include <stdlib.h> + +int main(void) +{ + size_t pgsz = sysconf(_SC_PAGE_SIZE); + void *addr = mmap(0, pgsz, PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_SHARED, -1, 0); + if (addr == MAP_FAILED) + return EXIT_FAILURE; + mprotect(addr, pgsz, PROT_WRITE); + madvise(addr, pgsz, MADV_SEQUENTIAL); + msync(addr, pgsz, MS_SYNC); + munmap(addr, pgsz); + return 0; +} +! + +if conftest ; then + printf "yes\n" + printf "#define HAVE_MMAP 1\n" >> config.h +else + printf "no\n" +fi + + # # Dependent variables # |