diff options
author | Earl Chew <earl_chew@agilent.com> | 2005-03-07 22:42:42 +0000 |
---|---|---|
committer | David Billinghurst <billingd@gcc.gnu.org> | 2005-03-07 22:42:42 +0000 |
commit | 5fa09df40239511f4d688af53999322106e8934b (patch) | |
tree | 21379c1c596b36973b67129132955861a43b722e /gcc | |
parent | cff001b2e843de422ba2a67b9049b558709a91dd (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config.host | 2 | ||||
-rwxr-xr-x | gcc/config/i386/host-cygwin.c | 81 | ||||
-rw-r--r-- | gcc/config/i386/x-cygwin | 4 |
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 |