From 0e20c0c8c66cd99df830edb0dce80eea2415e58f Mon Sep 17 00:00:00 2001 From: Michael Gran Date: Tue, 20 Jun 2023 15:21:10 -0700 Subject: [PATCH] Add replacement for missing getpagesize() on MINGW * libguile/posix-w32.c (getpagesize_w32): new procedure * libguile/posix-w32.h: declaration of getpagesize_w32 * libguile/loader.c [__MINGW32__](scm_bootstrap_loader): use new procedure * libguile/vm.c [__MINGW32__](scm_i_vm_prepare_stack): use new procedure --- libguile/loader.c | 7 +++++++ libguile/posix-w32.c | 5 +++++ libguile/posix-w32.h | 1 + libguile/vm.c | 8 ++++++++ 4 files changed, 21 insertions(+) diff --git a/libguile/loader.c b/libguile/loader.c index ae4e1e368..2bd66d924 100644 --- a/libguile/loader.c +++ b/libguile/loader.c @@ -52,6 +52,9 @@ #include "loader.h" +#ifdef __MINGW32__ +#include "posix-w32.h" +#endif /* This file contains the loader for Guile's on-disk format: ELF with some custom tags in the dynamic segment. */ @@ -822,7 +825,11 @@ scm_find_slot_map_unlocked (const uint32_t *ip) void scm_bootstrap_loader (void) { +#ifndef __MINGW32__ page_size = getpagesize (); +#else + page_size = getpagesize_w32 (); +#endif /* page_size should be a power of two. */ if (page_size & (page_size - 1)) abort (); diff --git a/libguile/posix-w32.c b/libguile/posix-w32.c index f11c52673..bf654b593 100644 --- a/libguile/posix-w32.c +++ b/libguile/posix-w32.c @@ -1256,3 +1256,8 @@ dlerror_w32 () snprintf (dlerror_str, DLERROR_LEN, "error %ld: %s", (long) dw, msg_buf); return dlerror_str; } +int +getpagesize_w32 (void) +{ + return 4 * 1024; +} diff --git a/libguile/posix-w32.h b/libguile/posix-w32.h index 7e4b3e0ba..147174420 100644 --- a/libguile/posix-w32.h +++ b/libguile/posix-w32.h @@ -95,6 +95,7 @@ SCM_INTERNAL void *dlopen_w32 (const char *name, int flags); SCM_INTERNAL void *dlsym_w32 (void *handle, const char *name); SCM_INTERNAL int dlclose_w32 (void *handle); SCM_INTERNAL char *dlerror_w32 (void); +SCM_INTERNAL int getpagesize_w32 (void); #define HAVE_UNAME 1 #define HAVE_WAITPID 1 diff --git a/libguile/vm.c b/libguile/vm.c index 36138f0d5..6dc05e883 100644 --- a/libguile/vm.c +++ b/libguile/vm.c @@ -72,6 +72,10 @@ #include "version.h" #include "vm-builtins.h" +#ifdef __MINGW32__ +#include "posix-w32.h" +#endif + #include "vm.h" #include @@ -604,7 +608,11 @@ scm_i_vm_prepare_stack (struct scm_vm *vp) Guile. */ if (page_size == 0) { +#ifndef __MINGW32__ page_size = getpagesize (); +#else + page_size = getpagesize_w32 (); +#endif /* page_size should be a power of two. */ if (page_size & (page_size - 1)) abort ();