[libc-commits] [libc] 0bcff14 - [libc] Make <sys/mman.h> tests hermetic (#210697)
via libc-commits
libc-commits at lists.llvm.org
Tue Jul 28 00:58:36 PDT 2026
Author: Pavel Labath
Date: 2026-07-28T09:58:31+02:00
New Revision: 0bcff14b1740cf32f9e0983726238dcf353c6ac8
URL: https://github.com/llvm/llvm-project/commit/0bcff14b1740cf32f9e0983726238dcf353c6ac8
DIFF: https://github.com/llvm/llvm-project/commit/0bcff14b1740cf32f9e0983726238dcf353c6ac8.diff
LOG: [libc] Make <sys/mman.h> tests hermetic (#210697)
The only issue was in pkey_test, which uses function-local static to do
lazy initialization. This requires the c++ runtime
(__cxa_guard_acquire/release).
There are no threads in this test, so we can just use the
(non-thread-safe) hand-rolled version of that. This is currently our
only test with such a pattern.
This would be something that in gtest would go into a SetUpTestSuite
method, but our test framework currently doesn't have an equivalent.
Added:
Modified:
libc/test/src/sys/mman/linux/CMakeLists.txt
libc/test/src/sys/mman/linux/pkey_test.cpp
Removed:
################################################################################
diff --git a/libc/test/src/sys/mman/linux/CMakeLists.txt b/libc/test/src/sys/mman/linux/CMakeLists.txt
index 627952f654d5f..e46bdb59a42f0 100644
--- a/libc/test/src/sys/mman/linux/CMakeLists.txt
+++ b/libc/test/src/sys/mman/linux/CMakeLists.txt
@@ -1,6 +1,6 @@
add_custom_target(libc_sys_mman_unittests)
-add_libc_unittest(
+add_libc_test(
mmap_test
SUITE
libc_sys_mman_unittests
@@ -18,7 +18,7 @@ add_libc_unittest(
libc.test.UnitTest.ErrnoSetterMatcher
)
-add_libc_unittest(
+add_libc_test(
mremap_test
SUITE
libc_sys_mman_unittests
@@ -36,7 +36,7 @@ add_libc_unittest(
)
if (NOT LLVM_USE_SANITIZER)
- add_libc_unittest(
+ add_libc_test(
mprotect_test
SUITE
libc_sys_mman_unittests
@@ -54,7 +54,7 @@ if (NOT LLVM_USE_SANITIZER)
)
endif()
-add_libc_unittest(
+add_libc_test(
madvise_test
SUITE
libc_sys_mman_unittests
@@ -75,7 +75,7 @@ add_libc_unittest(
# This test intentionally triggers segfaults to verify pkey_mprotect behavior,
# and sanitizers register signal handlers that interfere with death testing.
if (NOT LLVM_USE_SANITIZER)
- add_libc_unittest(
+ add_libc_test(
pkey_test
SUITE
libc_sys_mman_unittests
@@ -98,7 +98,7 @@ if (NOT LLVM_USE_SANITIZER)
)
endif()
-add_libc_unittest(
+add_libc_test(
posix_madvise_test
SUITE
libc_sys_mman_unittests
@@ -115,7 +115,7 @@ add_libc_unittest(
libc.test.UnitTest.ErrnoSetterMatcher
)
-add_libc_unittest(
+add_libc_test(
mincore_test
SUITE
libc_sys_mman_unittests
@@ -137,7 +137,7 @@ add_libc_unittest(
libc.test.UnitTest.ErrnoSetterMatcher
)
-add_libc_unittest(
+add_libc_test(
mlock_test
SUITE
libc_sys_mman_unittests
@@ -165,7 +165,7 @@ add_libc_unittest(
libc.test.UnitTest.ErrnoSetterMatcher
)
-add_libc_unittest(
+add_libc_test(
msync_test
SUITE
libc_sys_mman_unittests
@@ -192,7 +192,7 @@ if(CMAKE_CROSSCOMPILING_EMULATOR)
message(STATUS "Skipping remap_file_pages_test under emulator.")
endif()
else()
-add_libc_unittest(
+add_libc_test(
remap_file_pages_test
SUITE
libc_sys_mman_unittests
@@ -213,7 +213,7 @@ add_libc_unittest(
)
endif()
-add_libc_unittest(
+add_libc_test(
shm_test
SUITE
libc_sys_mman_unittests
@@ -237,7 +237,7 @@ add_libc_unittest(
libc.test.UnitTest.ErrnoSetterMatcher
)
-add_libc_unittest(
+add_libc_test(
memfd_create_test
SUITE
libc_sys_mman_unittests
diff --git a/libc/test/src/sys/mman/linux/pkey_test.cpp b/libc/test/src/sys/mman/linux/pkey_test.cpp
index 73945df0d4177..d81df4057501f 100644
--- a/libc/test/src/sys/mman/linux/pkey_test.cpp
+++ b/libc/test/src/sys/mman/linux/pkey_test.cpp
@@ -73,7 +73,13 @@ class MMapPageGuard {
};
bool protection_keys_supported() {
- static bool supported = []() {
+ static bool checked = false;
+ static bool supported;
+ if (checked)
+ return supported;
+
+ checked = true;
+ supported = []() {
PKeyGuard pkey(LIBC_NAMESPACE::pkey_alloc(0, 0));
int err = libc_errno;
libc_errno = 0;
More information about the libc-commits
mailing list