public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/105858] New: MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable
@ 2022-06-05 19:13 brechtsanders at users dot sourceforge.net
  2022-07-04  9:18 ` [Bug pch/105858] " brechtsanders at users dot sourceforge.net
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: brechtsanders at users dot sourceforge.net @ 2022-06-05 19:13 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105858

            Bug ID: 105858
           Summary: MinGW-w64 64-bit build with --libstdcxx-pch: fatal
                    error: cannot write PCH file: required memory segment
                    unavailable
           Product: gcc
           Version: 12.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: brechtsanders at users dot sourceforge.net
  Target Milestone: ---

When building the Windows 64-bit version of GCC 12.1.0 against MinGW-w64 build
with --libstdcxx-pch the following error occurs:

In file included from
R:/winlibs64_stage/gcc-12.1.0/libstdc++-v3/include/precompiled/extc++.h:82:
R:/winlibs64_stage/gcc-12.1.0/build_mingw/x86_64-w64-mingw32/libstdc++-v3/include/ext/enc_filebuf.h:63:1:
fatal error: cannot write PCH file: required memory segment unavailable
   63 | } // namespace
      | ^
compilation terminated.

This error does not happen when building the 32-bit version.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug pch/105858] MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable
  2022-06-05 19:13 [Bug c/105858] New: MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable brechtsanders at users dot sourceforge.net
@ 2022-07-04  9:18 ` brechtsanders at users dot sourceforge.net
  2022-07-25  9:32 ` brechtsanders at users dot sourceforge.net
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: brechtsanders at users dot sourceforge.net @ 2022-07-04  9:18 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105858

--- Comment #1 from Brecht Sanders <brechtsanders at users dot sourceforge.net> ---
Any news on this?
I am not the only one experiencing this.
See also: https://github.com/brechtsanders/winlibs_mingw/issues/108

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug pch/105858] MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable
  2022-06-05 19:13 [Bug c/105858] New: MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable brechtsanders at users dot sourceforge.net
  2022-07-04  9:18 ` [Bug pch/105858] " brechtsanders at users dot sourceforge.net
@ 2022-07-25  9:32 ` brechtsanders at users dot sourceforge.net
  2022-08-06 10:02 ` brechtsanders at users dot sourceforge.net
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: brechtsanders at users dot sourceforge.net @ 2022-07-25  9:32 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105858

--- Comment #2 from Brecht Sanders <brechtsanders at users dot sourceforge.net> ---
Just checked, issue is still present in snapshot 12-20220723.

Anybody able to confirm the issue or know what the status is?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug pch/105858] MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable
  2022-06-05 19:13 [Bug c/105858] New: MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable brechtsanders at users dot sourceforge.net
  2022-07-04  9:18 ` [Bug pch/105858] " brechtsanders at users dot sourceforge.net
  2022-07-25  9:32 ` brechtsanders at users dot sourceforge.net
@ 2022-08-06 10:02 ` brechtsanders at users dot sourceforge.net
  2022-09-04  7:58 ` brechtsanders at users dot sourceforge.net
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: brechtsanders at users dot sourceforge.net @ 2022-08-06 10:02 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105858

--- Comment #3 from Brecht Sanders <brechtsanders at users dot sourceforge.net> ---
Some information I received related to this issue:

On 01/08/2022 14:52, Luis Dallos wrote:
>
>     PCH has had issues for as long as I can remember, see for example:
>
>     * https://github.com/msys2/MINGW-packages/blob/master/mingw-w64-gcc/0010-Fix-using-large-PCH.patch
>
> The msys2 team commited in msys2/MINGW-packages@52908ed an additional patch in order to fix PCH relocation issues.
>
> https://github.com/msys2/MINGW-packages/blob/master/mingw-w64-gcc/0021-PR14940-Allow-a-PCH-to-be-mapped-to-a-different-addr.patch
>
> See also:
>
> msys2/MINGW-packages#11582 (comment)
> https://gcc.gnu.org/pipermail/gcc-patches/2022-May/594556.html

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug pch/105858] MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable
  2022-06-05 19:13 [Bug c/105858] New: MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable brechtsanders at users dot sourceforge.net
                   ` (2 preceding siblings ...)
  2022-08-06 10:02 ` brechtsanders at users dot sourceforge.net
@ 2022-09-04  7:58 ` brechtsanders at users dot sourceforge.net
  2022-09-04 13:53 ` brechtsanders at users dot sourceforge.net
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: brechtsanders at users dot sourceforge.net @ 2022-09-04  7:58 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105858

--- Comment #4 from Brecht Sanders <brechtsanders at users dot sourceforge.net> ---
Any update on this issue?

I see performance complaints from several people in GCC12+MinGW-w64 being much
slower in the build without precompiled headers (see:
https://github.com/brechtsanders/winlibs_mingw/issues/107)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug pch/105858] MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable
  2022-06-05 19:13 [Bug c/105858] New: MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable brechtsanders at users dot sourceforge.net
                   ` (3 preceding siblings ...)
  2022-09-04  7:58 ` brechtsanders at users dot sourceforge.net
@ 2022-09-04 13:53 ` brechtsanders at users dot sourceforge.net
  2022-12-24  1:56 ` egor.pugin at gmail dot com
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: brechtsanders at users dot sourceforge.net @ 2022-09-04 13:53 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105858

--- Comment #5 from Brecht Sanders <brechtsanders at users dot sourceforge.net> ---
I believe this is issue is cause by the fact that mmap is missing on Windows.

In gcc/ggc-common.cc this causes use of default_gt_pch_get_address() as
HOST_HOOKS_GT_PCH_GET_ADDRESS which just returns NULL resulting in "cannot
write PCH file: required memory segment unavailable".

Though mmap doesn't exist, it isn't that hard to emulate, as can be seen in
https://github.com/alitrack/mman-win32 , so maybe some code is needed to use
the Windows memory mapping mechanism.

I did try to build against https://github.com/alitrack/mman-win32, but I ran
into the issue that this requires linking with the library mman-win32, but
passing it to LDFLAGS doesn't work as it's not near the end of the linker
command and link order is important on Windows/MinGW.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug pch/105858] MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable
  2022-06-05 19:13 [Bug c/105858] New: MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable brechtsanders at users dot sourceforge.net
                   ` (4 preceding siblings ...)
  2022-09-04 13:53 ` brechtsanders at users dot sourceforge.net
@ 2022-12-24  1:56 ` egor.pugin at gmail dot com
  2022-12-26 15:02 ` brechtsanders at users dot sourceforge.net
  2022-12-30 13:26 ` brechtsanders at users dot sourceforge.net
  7 siblings, 0 replies; 9+ messages in thread
From: egor.pugin at gmail dot com @ 2022-12-24  1:56 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105858

--- Comment #6 from Egor Pugin <egor.pugin at gmail dot com> ---
Same issue.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug pch/105858] MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable
  2022-06-05 19:13 [Bug c/105858] New: MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable brechtsanders at users dot sourceforge.net
                   ` (5 preceding siblings ...)
  2022-12-24  1:56 ` egor.pugin at gmail dot com
@ 2022-12-26 15:02 ` brechtsanders at users dot sourceforge.net
  2022-12-30 13:26 ` brechtsanders at users dot sourceforge.net
  7 siblings, 0 replies; 9+ messages in thread
From: brechtsanders at users dot sourceforge.net @ 2022-12-26 15:02 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105858

--- Comment #7 from Brecht Sanders <brechtsanders at users dot sourceforge.net> ---
Any update on this?
This issue makes GCC12 really slow on Windows because PCH support doesn't work.

If mman-win32 support could be made to work it might solve this issue. The
problem is that this requires linking with -lmman (and this flag needs to be
near the end of the list of linked libraries)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug pch/105858] MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable
  2022-06-05 19:13 [Bug c/105858] New: MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable brechtsanders at users dot sourceforge.net
                   ` (6 preceding siblings ...)
  2022-12-26 15:02 ` brechtsanders at users dot sourceforge.net
@ 2022-12-30 13:26 ` brechtsanders at users dot sourceforge.net
  7 siblings, 0 replies; 9+ messages in thread
From: brechtsanders at users dot sourceforge.net @ 2022-12-30 13:26 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105858

--- Comment #8 from Brecht Sanders <brechtsanders at users dot sourceforge.net> ---
I seem to be having some success after applying patches based on:
https://github.com/msys2/MINGW-packages/blob/master/mingw-w64-gcc/0010-Fix-using-large-PCH.patch
https://github.com/msys2/MINGW-packages/blob/master/mingw-w64-gcc/0021-PR14940-Allow-a-PCH-to-be-mapped-to-a-different-addr.patch

My patch for GCC 12.2.0 looks like this:
patch -ulbf gcc/config/i386/host-mingw32.cc << EOF
@@ -46,5 +46,2 @@

-/* FIXME: Is this big enough?  */
-static const size_t pch_VA_max_size  = 128 * 1024 * 1024;
-
 /* Granularity for reserving address space.  */
@@ -90,5 +87,2 @@
   void* res;
-  size = (size + va_granularity - 1) & ~(va_granularity - 1);
-  if (size > pch_VA_max_size)
-    return NULL;

@@ -102,3 +96,3 @@

-  res = VirtualAlloc (NULL, pch_VA_max_size,
+  res = VirtualAlloc (NULL, size,
                      MEM_RESERVE | MEM_TOP_DOWN,
@@ -143,3 +137,2 @@
   OSVERSIONINFO version_info;
-  int r;

@@ -152,3 +145,3 @@
      this to work.  We can't change the offset. */
-  if ((offset & (va_granularity - 1)) != 0 || size > pch_VA_max_size)
+  if ((offset & (va_granularity - 1)) != 0)
     return -1;
@@ -177,21 +170,20 @@

-  /* Retry five times, as here might occure a race with multiple gcc's
-     instances at same time.  */
-  for (r = 0; r < 5; r++)
-   {
-      mmap_addr = MapViewOfFileEx (mmap_handle, FILE_MAP_COPY, 0, offset,
-                                  size, addr);
-      if (mmap_addr == addr)
-       break;
-      if (r != 4)
-        Sleep (500);
-   }
-
-  if (mmap_addr != addr)
+  /* Try mapping the file at \`addr\`.  */
+  mmap_addr = MapViewOfFileEx (mmap_handle, FILE_MAP_COPY, 0, offset,
+                              size, addr);
+  if (mmap_addr == NULL)
     {
-      w32_error (__FUNCTION__, __FILE__, __LINE__, "MapViewOfFileEx");
-      CloseHandle(mmap_handle);
-      return  -1;
+      /* We could not map the file at its original address, so let the
+        system choose a different one. The PCH can be relocated later.  */
+      mmap_addr = MapViewOfFileEx (mmap_handle, FILE_MAP_COPY, 0, offset,
+                                  size, NULL);
+      if (mmap_addr == NULL)
+       {
+         w32_error (__FUNCTION__, __FILE__, __LINE__, "MapViewOfFileEx");
+         CloseHandle(mmap_handle);
+         return  -1;
+       }
     }

+  addr = mmap_addr;
   return 1;
EOF

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-12-30 13:26 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-05 19:13 [Bug c/105858] New: MinGW-w64 64-bit build with --libstdcxx-pch: fatal error: cannot write PCH file: required memory segment unavailable brechtsanders at users dot sourceforge.net
2022-07-04  9:18 ` [Bug pch/105858] " brechtsanders at users dot sourceforge.net
2022-07-25  9:32 ` brechtsanders at users dot sourceforge.net
2022-08-06 10:02 ` brechtsanders at users dot sourceforge.net
2022-09-04  7:58 ` brechtsanders at users dot sourceforge.net
2022-09-04 13:53 ` brechtsanders at users dot sourceforge.net
2022-12-24  1:56 ` egor.pugin at gmail dot com
2022-12-26 15:02 ` brechtsanders at users dot sourceforge.net
2022-12-30 13:26 ` brechtsanders at users dot sourceforge.net

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).