diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | config.h.in | 3 | ||||
-rw-r--r-- | mach/mach_init.c | 18 | ||||
-rw-r--r-- | sysdeps/mach/configure.in | 9 |
4 files changed, 29 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog index b70cb7264f..5feb9f265d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2002-02-16 Roland McGrath <roland@frob.com> + * config.h.in: Add #undef HAVE_HOST_PAGE_SIZE. + * sysdeps/mach/configure.in: Check for host_page_size RPC to define it. + * mach/mach_init.c (__mach_init) [HAVE_HOST_PAGE_SIZE]: Use + host_page_size instead of vm_statistics. + * sysdeps/mach/Makefile (mach-before-compile): Don't include mach_interface.h here, since not all variants use that name. diff --git a/config.h.in b/config.h.in index b15e8f15ce..fae29729e4 100644 --- a/config.h.in +++ b/config.h.in @@ -131,6 +131,9 @@ /* Mach/Hurd specific: define if mig supports the `retcode' keyword. */ #undef HAVE_MIG_RETCODE +/* Mach specific: define if the `host_page_size' RPC is available. */ +#undef HAVE_HOST_PAGE_SIZE + /* */ diff --git a/mach/mach_init.c b/mach/mach_init.c index 468aba9025..0dd33e44d9 100644 --- a/mach/mach_init.c +++ b/mach/mach_init.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1992,93,95,97,2001 Free Software Foundation, Inc. +/* Copyright (C) 1992,93,95,97,2001,02 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,8 +16,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include <mach_init.h> -#include <mach/mach_interface.h> +#include <mach.h> #include <mach/mig_support.h> #include <unistd.h> @@ -29,13 +28,20 @@ void __mach_init (void) { kern_return_t err; - vm_statistics_data_t stats; __mach_task_self_ = (__mach_task_self) (); __mig_init (0); - if (err = __vm_statistics (__mach_task_self (), &stats)) +#if HAVE_HOST_PAGE_SIZE + if (err = __host_page_size (__mach_host_self (), &__vm_page_size)) _exit (err); - __vm_page_size = stats.pagesize; +#else + { + vm_statistics_data_t stats; + if (err = __vm_statistics (__mach_task_self (), &stats)) + _exit (err); + __vm_page_size = stats.pagesize; + } +#endif } weak_alias (__mach_init, mach_init) diff --git a/sysdeps/mach/configure.in b/sysdeps/mach/configure.in index 058a2a05c8..05dc45b61d 100644 --- a/sysdeps/mach/configure.in +++ b/sysdeps/mach/configure.in @@ -59,3 +59,12 @@ done if test "x$mach_interface_list" = x; then AC_MSG_ERROR([what manner of Mach is this?]) fi + +AC_CACHE_CHECK(for host_page_size in mach_host.defs, + libc_cv_mach_host_page_size, [dnl +AC_EGREP_HEADER(host_page_size, mach/mach_host.defs, + libc_cv_mach_host_page_size=yes, + libc_cv_mach_host_page_size=no)]) +if test $libc_cv_mach_host_page_size = yes; then + AC_DEFINE([HAVE_HOST_PAGE_SIZE]) +fi |