/* Copyright (C) 1992-2014 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
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   <http://www.gnu.org/licenses/>.  */

#include <mach.h>
#include <mach/mig_support.h>
#include <unistd.h>

mach_port_t __mach_task_self_;
vm_size_t __vm_page_size = 0;	/* Must be data not bss for weak alias.  */
weak_alias (__vm_page_size, vm_page_size)

#ifdef NDR_DEF_HEADER
/* This defines NDR_record, which the MiG-generated stubs use. XXX namespace */
# include NDR_DEF_HEADER
#endif

void
__mach_init (void)
{
  kern_return_t err;

  __mach_task_self_ = (__mach_task_self) ();
  __mig_init (0);

#if HAVE_HOST_PAGE_SIZE
  if (err = __host_page_size (__mach_host_self (), &__vm_page_size))
    _exit (err);
#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)
