aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEarl Chew <earl_chew@agilent.com>2005-03-07 22:42:42 +0000
committerDavid Billinghurst <billingd@gcc.gnu.org>2005-03-07 22:42:42 +0000
commit5fa09df40239511f4d688af53999322106e8934b (patch)
tree21379c1c596b36973b67129132955861a43b722e /gcc
parentcff001b2e843de422ba2a67b9049b558709a91dd (diff)
downloadgcc-5fa09df40239511f4d688af53999322106e8934b.zip
gcc-5fa09df40239511f4d688af53999322106e8934b.tar.gz
gcc-5fa09df40239511f4d688af53999322106e8934b.tar.bz2
host-cygwin.c: New file to support precompiled headers on cygwin
2005-03-08 Earl Chew <earl_chew@agilent.com> David Billinghurst <David.Billinghurst@riotinto.com> * config/i386/host-cygwin.c: New file to support precompiled headers on cygwin * config/i386/x-cygwin: Use host-cygwin.c on cygwin host * config.host: Use above files for cygwin host. Co-Authored-By: David Billinghurst <David.Billinghurst@riotinto.com> From-SVN: r96050
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config.host2
-rwxr-xr-xgcc/config/i386/host-cygwin.c81
-rw-r--r--gcc/config/i386/x-cygwin4
4 files changed, 95 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ccb32de..5fce904 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2005-03-08 Earl Chew <earl_chew@agilent.com>
+ David Billinghurst <David.Billinghurst@riotinto.com>
+
+ * config/i386/host-cygwin.c: New file to support precompiled
+ headers on cygwin
+ * config/i386/x-cygwin: Use host-cygwin.c on cygwin host
+ * config.host: Use above files for cygwin host.
+
2005-03-07 David Edelsohn <edelsohn@gnu.org>
* fold-const.c (fold_binary_op_with_conditional_arg): Fix typo
diff --git a/gcc/config.host b/gcc/config.host
index 9024ec1..cb1e9a6 100644
--- a/gcc/config.host
+++ b/gcc/config.host
@@ -146,6 +146,8 @@ case ${host} in
;;
i[34567]86-*-pe | i[34567]86-*-cygwin*)
host_xm_file=i386/xm-cygwin.h
+ out_host_hook_obj=host-cygwin.o
+ host_xmake_file=i386/x-cygwin
host_exeext=.exe
;;
i[34567]86-*-mingw32*)
diff --git a/gcc/config/i386/host-cygwin.c b/gcc/config/i386/host-cygwin.c
new file mode 100755
index 0000000..4f6de6f
--- /dev/null
+++ b/gcc/config/i386/host-cygwin.c
@@ -0,0 +1,81 @@
+/* Cygwin host-specific hook definitions.
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 2, or (at your
+ option) any later version.
+
+ GCC 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 General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING. If not, write to the
+ Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+ MA 02111-1307, USA. */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include <sys/mman.h>
+#include "hosthooks.h"
+#include "hosthooks-def.h"
+#include "toplev.h"
+#include "diagnostic.h"
+
+static void * cygwin_gt_pch_get_address (size_t, int fd);
+static size_t cygwin_gt_pch_alloc_granularity (void);
+
+#undef HOST_HOOKS_GT_PCH_GET_ADDRESS
+#define HOST_HOOKS_GT_PCH_GET_ADDRESS cygwin_gt_pch_get_address
+#undef HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY
+#define HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY cygwin_gt_pch_alloc_granularity
+
+/* Granularity for reserving address space. */
+static const size_t va_granularity = 0x10000;
+
+/* Return the alignment required for allocating virtual memory. */
+static size_t
+cygwin_gt_pch_alloc_granularity (void)
+{
+ return va_granularity;
+}
+
+/* Identify an address that's likely to be free in a subsequent invocation
+ of the compiler. The area should be able to hold SIZE bytes. FD is an
+ open file descriptor if the host would like to probe with mmap. */
+static void *
+cygwin_gt_pch_get_address (size_t sz, int fd)
+{
+ void *base;
+ off_t p = lseek(fd, 0, SEEK_CUR);
+
+ if (p == (off_t) -1)
+ fatal_error ("can't get position in PCH file: %m");
+
+ /* Cygwin requires that the underlying file be at least
+ as large as the requested mapping. */
+ if ((size_t) p < sz)
+ {
+ if ( ftruncate (fd, sz) == -1 )
+ fatal_error ("can't extend PCH file: %m");
+ }
+
+ base = mmap (NULL, sz, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
+
+ if (base == MAP_FAILED)
+ base = NULL;
+ else
+ munmap (base, sz);
+
+ if (lseek (fd, p, SEEK_SET) == (off_t) -1 )
+ fatal_error ("can't set position in PCH file: %m");
+
+ return base;
+}
+
+const struct host_hooks host_hooks = HOST_HOOKS_INITIALIZER;
diff --git a/gcc/config/i386/x-cygwin b/gcc/config/i386/x-cygwin
new file mode 100644
index 0000000..1547f5f
--- /dev/null
+++ b/gcc/config/i386/x-cygwin
@@ -0,0 +1,4 @@
+host-cygwin.o : $(srcdir)/config/i386/host-cygwin.c $(CONFIG_H) $(SYSTEM_H) \
+ coretypes.h hosthooks.h hosthooks-def.h toplev.h diagnostic.h
+ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+ $(srcdir)/config/i386/host-cygwin.c