fi
AC_SUBST(install_sh)])
-# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# Check whether the underlying file-system supports filenames
-# with a leading dot. For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
- am__leading_dot=.
-else
- am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
-
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering
esac
])
-# Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2012
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 6
-
-# AM_ENABLE_MULTILIB([MAKEFILE], [REL-TO-TOP-SRCDIR])
-# ---------------------------------------------------
-# Add --enable-multilib to configure.
-AC_DEFUN([AM_ENABLE_MULTILIB],
-[m4_warn([obsolete], [$0 will be removed from Automake core soon.
-Files implementing the "multilib" feature are (and will remain) available
-to the 'contrib/' directory in the Automake distribution.])]dnl
-[# Default to --enable-multilib
-AC_ARG_ENABLE(multilib,
-[ --enable-multilib build many library versions (default)],
-[case "$enableval" in
- yes) multilib=yes ;;
- no) multilib=no ;;
- *) AC_MSG_ERROR([bad value $enableval for multilib option]) ;;
- esac],
- [multilib=yes])
-
-# We may get other options which we leave undocumented:
-# --with-target-subdir, --with-multisrctop, --with-multisubdir
-# See config-ml.in if you want the gory details.
-
-if test "$srcdir" = "."; then
- if test "$with_target_subdir" != "."; then
- multi_basedir="$srcdir/$with_multisrctop../$2"
- else
- multi_basedir="$srcdir/$with_multisrctop$2"
- fi
-else
- multi_basedir="$srcdir/$2"
-fi
-AC_SUBST(multi_basedir)
-
-# Even if the default multilib is not a cross compilation,
-# it may be that some of the other multilibs are.
-if test $cross_compiling = no && test $multilib = yes \
- && test "x${with_multisubdir}" != x ; then
- cross_compiling=maybe
-fi
-
-AC_OUTPUT_COMMANDS([
-# Only add multilib support code if we just rebuilt the top-level
-# Makefile.
-case " $CONFIG_FILES " in
- *" ]m4_default([$1],Makefile)[ "*)
- ac_file=]m4_default([$1],Makefile)[ . ${multi_basedir}/config-ml.in
- ;;
-esac],
- [
-srcdir="$srcdir"
-host="$host"
-target="$target"
-with_multisubdir="$with_multisubdir"
-with_multisrctop="$with_multisrctop"
-with_target_subdir="$with_target_subdir"
-ac_configure_args="${multilib_arg} ${ac_configure_args}"
-multi_basedir="$multi_basedir"
-CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-CC="$CC"])])dnl
-
# Helper functions for option handling. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
+m4_include([../config/depstand.m4])
+m4_include([../config/lead-dot.m4])
+m4_include([../config/multi.m4])
+m4_include([../config/override.m4])
+m4_include([../config/unwind_ipinfo.m4])
m4_include([config/go.m4])
m4_include([config/libtool.m4])
m4_include([config/ltoptions.m4])
+++ /dev/null
-/* go-trampoline.c -- allocate a trampoline for a nested function.
-
- Copyright 2009 The Go Authors. All rights reserved.
- Use of this source code is governed by a BSD-style
- license that can be found in the LICENSE file. */
-
-#include "config.h"
-
-#include <stddef.h>
-#include <stdint.h>
-#include <unistd.h>
-
-#ifdef HAVE_SYS_MMAN_H
-#include <sys/mman.h>
-#endif
-
-#include "runtime.h"
-#include "arch.h"
-#include "malloc.h"
-#include "go-assert.h"
-
-/* Trampolines need to run in memory that is both writable and
- executable. In order to implement them, we grab a page of memory
- and mprotect it. We fill in the page with trampolines as they are
- required. When we run out of space, we drop the pointer to the
- page and allocate a new one. The page will be freed by the garbage
- collector when there are no more variables of type func pointing to
- it. */
-
-/* A lock to control access to the page of closures. */
-
-static Lock trampoline_lock;
-
-/* The page of closures. */
-
-static unsigned char *trampoline_page;
-
-/* The size of trampoline_page. */
-
-static uintptr_t trampoline_page_size;
-
-/* The number of bytes we have used on trampoline_page. */
-
-static uintptr_t trampoline_page_used;
-
-/* Allocate a trampoline of SIZE bytes that will use the closure in
- CLOSURE. */
-
-void *
-__go_allocate_trampoline (uintptr_t size, void *closure)
-{
- uintptr_t ptr_size;
- uintptr_t full_size;
- unsigned char *ret;
-
- /* Because the garbage collector only looks at aligned addresses, we
- need to store the closure at an aligned address to ensure that it
- sees it. */
- ptr_size = sizeof (void *);
- full_size = (((size + ptr_size - 1) / ptr_size) * ptr_size);
- full_size += ptr_size;
-
- runtime_lock (&trampoline_lock);
-
- if (full_size < trampoline_page_size - trampoline_page_used)
- trampoline_page = NULL;
-
- if (trampoline_page == NULL)
- {
- uintptr_t page_size;
- unsigned char *page;
-
- page_size = getpagesize ();
- __go_assert (page_size >= full_size);
- page = (unsigned char *) runtime_mallocgc (2 * page_size - 1, 0, 0, 0);
- page = (unsigned char *) (((uintptr_t) page + page_size - 1)
- & ~ (page_size - 1));
-
-#ifdef HAVE_SYS_MMAN_H
- {
- int i;
-
- i = mprotect (page, page_size, PROT_READ | PROT_WRITE | PROT_EXEC);
- __go_assert (i == 0);
- }
-#endif
-
- trampoline_page = page;
- trampoline_page_size = page_size;
- trampoline_page_used = 0;
- }
-
- ret = trampoline_page + trampoline_page_used;
- trampoline_page_used += full_size;
-
- runtime_unlock (&trampoline_lock);
-
- __builtin_memcpy (ret + full_size - ptr_size, &closure, ptr_size);
-
- return (void *) ret;
-}
-
-/* Scan the trampoline page when running the garbage collector. This
- just makes sure that the garbage collector sees the pointer in
- trampoline_page, so that the page itself is not freed if there are
- no other references to it. */
-
-void
-runtime_trampoline_scan (void (*addroot) (Obj))
-{
- if (trampoline_page != NULL)
- addroot ((Obj){(byte *) &trampoline_page, sizeof trampoline_page, 0});
-}