aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/i386
diff options
context:
space:
mode:
authorDanny Smith <dannysmith@users.sourceforge.net>2009-04-08 08:02:48 +0000
committerDanny Smith <dannysmith@gcc.gnu.org>2009-04-08 08:02:48 +0000
commit8e481a2ca6dcab968cc8c18f0fdc6745e75b8afc (patch)
tree2f889b301b803e3f51a017333494a70f0c1c1fc6 /gcc/config/i386
parente04c614e09867345ee8ac03390cc75c5f2f1de1e (diff)
downloadgcc-8e481a2ca6dcab968cc8c18f0fdc6745e75b8afc.zip
gcc-8e481a2ca6dcab968cc8c18f0fdc6745e75b8afc.tar.gz
gcc-8e481a2ca6dcab968cc8c18f0fdc6745e75b8afc.tar.bz2
re PR bootstrap/39660 (Mingw Bootstrap stops with "..host-mingw32.c:140: error: ISO C90 forbids mixed..")
PR bootstrap/39660 * config/i386/host-mingw32.c (mingw32_gt_pch_use_address): Don't mix declarations and code. From-SVN: r145711
Diffstat (limited to 'gcc/config/i386')
-rw-r--r--gcc/config/i386/host-mingw32.c39
1 files changed, 22 insertions, 17 deletions
diff --git a/gcc/config/i386/host-mingw32.c b/gcc/config/i386/host-mingw32.c
index 1d2e59a..f91407f 100644
--- a/gcc/config/i386/host-mingw32.c
+++ b/gcc/config/i386/host-mingw32.c
@@ -1,5 +1,5 @@
/* mingw32 host-specific hook definitions.
- Copyright (C) 2004, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2007, 2009 Free Software Foundation, Inc.
This file is part of GCC.
@@ -122,23 +122,19 @@ mingw32_gt_pch_use_address (void *addr, size_t size, int fd,
don't get SeCreateGlobalPrivilege. We don't need global
memory sharing so explicitly put object into Local namespace.
- There is also another issue, which appears if multiple concurrent
- GCC processes are using PCH functionality. MapViewOfFileEx returns
- "Access Denied" error. So we need to make the session-wide mapping
- name unique. Let's use current process ID for that. */
-#define OBJECT_NAME_FMT "Local\\MinGWGCCPCH-"
+ If multiple concurrent GCC processes are using PCH functionality,
+ MapViewOfFileEx returns "Access Denied" error. So we ensure the
+ session-wide mapping name is unique by appending process ID. */
- /* Allocate enough space for name prefix and max possible DWORD
- hexadecimal representation. */
- char object_name[sizeof (OBJECT_NAME_FMT) + sizeof (DWORD) * 2];
- snprintf (object_name, sizeof (object_name), OBJECT_NAME_FMT "%lx",
- GetCurrentProcessId());
+#define OBJECT_NAME_FMT "Local\\MinGWGCCPCH-"
+ char* object_name = NULL;
/* However, the documentation for CreateFileMapping says that on NT4
and earlier, backslashes are invalid in object name. So, we need
to check if we are on Windows2000 or higher. */
OSVERSIONINFO version_info;
-
+ version_info.dwOSVersionInfoSize = sizeof (version_info);
+
if (size == 0)
return 0;
@@ -147,14 +143,23 @@ mingw32_gt_pch_use_address (void *addr, size_t size, int fd,
if ((offset & (va_granularity - 1)) != 0 || size > pch_VA_max_size)
return -1;
- /* Determine the version of Windows we are running on. */
- version_info.dwOSVersionInfoSize = sizeof (version_info);
- GetVersionEx (&version_info);
+ /* Determine the version of Windows we are running on and use a
+ uniquely-named local object if running > 4. */
+ GetVersionEx (&version_info);
+ if (version_info.dwMajorVersion > 4)
+ {
+ char local_object_name [sizeof (OBJECT_NAME_FMT)
+ + sizeof (DWORD) * 2];
+ snprintf (local_object_name, sizeof (local_object_name),
+ OBJECT_NAME_FMT "%lx", GetCurrentProcessId());
+ object_name = local_object_name;
+ }
+
mmap_handle = CreateFileMappingA ((HANDLE) _get_osfhandle (fd), NULL,
PAGE_WRITECOPY | SEC_COMMIT, 0, 0,
- version_info.dwMajorVersion > 4
- ? object_name : NULL);
+ object_name);
+
if (mmap_handle == NULL)
{
w32_error (__FUNCTION__, __FILE__, __LINE__, "CreateFileMapping");