Commit 8e481a2c by Danny Smith Committed by Danny Smith

re PR bootstrap/39660 (Mingw Bootstrap stops with "..host-mingw32.c:140: error:…

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
parent e04c614e
2009-04-08 Danny Smith <dannysmith@users.sourceforge.net>
PR bootstrap/39660
* config/i386/host-mingw32.c (mingw32_gt_pch_use_address): Don't
mix declarations and code.
2009-04-08 Ben Elliston <bje@au.ibm.com> 2009-04-08 Ben Elliston <bje@au.ibm.com>
* gcc.c: Replace `CC' with `GCC' throughout. * gcc.c: Replace `CC' with `GCC' throughout.
......
/* mingw32 host-specific hook definitions. /* 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. This file is part of GCC.
...@@ -122,23 +122,19 @@ mingw32_gt_pch_use_address (void *addr, size_t size, int fd, ...@@ -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 don't get SeCreateGlobalPrivilege. We don't need global
memory sharing so explicitly put object into Local namespace. memory sharing so explicitly put object into Local namespace.
There is also another issue, which appears if multiple concurrent If multiple concurrent GCC processes are using PCH functionality,
GCC processes are using PCH functionality. MapViewOfFileEx returns MapViewOfFileEx returns "Access Denied" error. So we ensure the
"Access Denied" error. So we need to make the session-wide mapping session-wide mapping name is unique by appending process ID. */
name unique. Let's use current process ID for that. */
#define OBJECT_NAME_FMT "Local\\MinGWGCCPCH-"
/* Allocate enough space for name prefix and max possible DWORD #define OBJECT_NAME_FMT "Local\\MinGWGCCPCH-"
hexadecimal representation. */
char object_name[sizeof (OBJECT_NAME_FMT) + sizeof (DWORD) * 2];
snprintf (object_name, sizeof (object_name), OBJECT_NAME_FMT "%lx",
GetCurrentProcessId());
char* object_name = NULL;
/* However, the documentation for CreateFileMapping says that on NT4 /* However, the documentation for CreateFileMapping says that on NT4
and earlier, backslashes are invalid in object name. So, we need and earlier, backslashes are invalid in object name. So, we need
to check if we are on Windows2000 or higher. */ to check if we are on Windows2000 or higher. */
OSVERSIONINFO version_info; OSVERSIONINFO version_info;
version_info.dwOSVersionInfoSize = sizeof (version_info);
if (size == 0) if (size == 0)
return 0; return 0;
...@@ -147,14 +143,23 @@ mingw32_gt_pch_use_address (void *addr, size_t size, int fd, ...@@ -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) if ((offset & (va_granularity - 1)) != 0 || size > pch_VA_max_size)
return -1; 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, mmap_handle = CreateFileMappingA ((HANDLE) _get_osfhandle (fd), NULL,
PAGE_WRITECOPY | SEC_COMMIT, 0, 0, PAGE_WRITECOPY | SEC_COMMIT, 0, 0,
version_info.dwMajorVersion > 4 object_name);
? object_name : NULL);
if (mmap_handle == NULL) if (mmap_handle == NULL)
{ {
w32_error (__FUNCTION__, __FILE__, __LINE__, "CreateFileMapping"); w32_error (__FUNCTION__, __FILE__, __LINE__, "CreateFileMapping");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment