summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Gran <spk121@yahoo.com>2023-06-20 15:21:10 -0700
committerMichael Gran <spk121@yahoo.com>2025-03-22 14:17:30 -0700
commit0e20c0c8c66cd99df830edb0dce80eea2415e58f (patch)
treef5e0ef450fa006c208601a49b640afab3bd7c09f
parent0b9f58c339184ef16f362e8e1aa0948a93f8b2d7 (diff)
downloadguile-0e20c0c8c66cd99df830edb0dce80eea2415e58f.tar.gz
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
-rw-r--r--libguile/loader.c7
-rw-r--r--libguile/posix-w32.c5
-rw-r--r--libguile/posix-w32.h1
-rw-r--r--libguile/vm.c8
4 files changed, 21 insertions, 0 deletions
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 <gc/gc_mark.h>
@@ -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 ();