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.
Ok for trunk?
All this makes me wonder if the use of posix_fallocate is really worth
the trouble.
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University
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.
# HG changeset patch
# Parent 18a1410d62f220c90ac0f44395bc8ba9215a541e
c++: modules: Allow for EOPNOTSUPP error from posix_fallocate
diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
--- 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, b
{
#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