[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