https://gcc.gnu.org/g:940db23b6b8461a97eead393a1adf85ef0905862

commit r17-2318-g940db23b6b8461a97eead393a1adf85ef0905862
Author: Rainer Orth <[email protected]>
Date:   Fri Jul 10 19:12:55 2026 +0200

    c++: modules: Allow for EOPNOTSUPP error from posix_fallocate
    
    All g++/modules tests SEGV on NetBSD/amd64 in a ZFS build directory.
    This is similar to the FreeBSD case:
    
    commit a94156b8ee7165c32f73f9cd11c9b8f3b8687d3b
    Author: Rainer Orth <[email protected]>
    Date:   Tue May 5 10:23:12 2026 +0200
    
        c++: modules: Fix posix_fallocate error handling
    
    However, posix_fallocate returns EOPNOTSUPP here, which is distinct from
    ENOTSUP.
    
    This patch allows for both, providing a fallback definition since
    EOPNOTSUPP may be missing.
    
    Bootstrapped without regressions on amd64-pc-netbsd10.1,
    x86_64-pc-linux-gnu, and i386-pc-solaris2.11.
    
    2026-07-08  Rainer Orth  <[email protected]>
    
            gcc/cp:
            * module.cc (EOPNOTSUPP): Provide fallback.
            (elf_out::create_mapping) [HAVE_POSIX_FALLOCATE]: Allow for
            EOPNOTSUPP result.

Diff:
---
 gcc/cp/module.cc | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
index f250dc3e9dfe..da0e0e0aae3a 100644
--- a/gcc/cp/module.cc
+++ b/gcc/cp/module.cc
@@ -258,6 +258,11 @@ Classes used:
 #endif
 #endif
 
+/* Provide fallback.  */
+#ifndef EOPNOTSUPP
+#define EOPNOTSUPP ENOTSUP
+#endif
+
 /* Some open(2) flag differences, what a colourful world it is!  */
 #if defined (O_CLOEXEC)
 // OK
@@ -1912,7 +1917,7 @@ elf_out::create_mapping (unsigned ext, bool extending)
     {
 #ifdef HAVE_POSIX_FALLOCATE
       int result = posix_fallocate (fd, offset, length);
-      if (result != EINVAL && result != ENOTSUP)
+      if (result != EINVAL && result != ENOTSUP && result != EOPNOTSUPP)
        return result == 0;
       /* Not supported by the underlying filesystem, fallback to ftruncate.  */
 #endif

Reply via email to