From 2f5f7521286bdf5253a0241144439bf24f284569 Mon Sep 17 00:00:00 2001 From: moar55 Date: Tue, 5 Nov 2024 20:57:03 +0100 Subject: [PATCH 1/9] #110124: Add support for process_mrelease syscall --- libc/config/linux/aarch64/entrypoints.txt | 1 + libc/config/linux/riscv/entrypoints.txt | 1 + libc/config/linux/x86_64/entrypoints.txt | 1 + libc/include/sys/syscall.h.def | 7 + libc/newhdrgen/yaml/sys/mman.yaml | 7 + libc/spec/linux.td | 6 + libc/src/sys/mman/CMakeLists.txt | 147 +++-------- libc/src/sys/mman/linux/CMakeLists.txt | 215 ++++++++-------- libc/src/sys/mman/linux/process_mrelease.cpp | 33 +++ libc/src/sys/mman/process_mrelease.h | 22 ++ libc/test/src/sys/mman/linux/CMakeLists.txt | 235 ++++++++++-------- .../sys/mman/linux/process_mrelease_test.cpp | 74 ++++++ 12 files changed, 420 insertions(+), 329 deletions(-) create mode 100644 libc/src/sys/mman/linux/process_mrelease.cpp create mode 100644 libc/src/sys/mman/process_mrelease.h create mode 100644 libc/test/src/sys/mman/linux/process_mrelease_test.cpp diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt index 74ca3742977a5..08b5072499da6 100644 --- a/libc/config/linux/aarch64/entrypoints.txt +++ b/libc/config/linux/aarch64/entrypoints.txt @@ -252,6 +252,7 @@ set(TARGET_LIBC_ENTRYPOINTS libc.src.sys.mman.munlockall libc.src.sys.mman.munmap libc.src.sys.mman.remap_file_pages + libc.src.sys.mman.process_mrelease libc.src.sys.mman.posix_madvise libc.src.sys.mman.shm_open libc.src.sys.mman.shm_unlink diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt index 5419462d4f5b3..4ea65f76d7948 100644 --- a/libc/config/linux/riscv/entrypoints.txt +++ b/libc/config/linux/riscv/entrypoints.txt @@ -251,6 +251,7 @@ set(TARGET_LIBC_ENTRYPOINTS libc.src.sys.mman.munmap libc.src.sys.mman.remap_file_pages libc.src.sys.mman.posix_madvise + libc.src.sys.mman.process_mrelease libc.src.sys.mman.shm_open libc.src.sys.mman.shm_unlink diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt index 957e28bd66cc4..d0651c06b930a 100644 --- a/libc/config/linux/x86_64/entrypoints.txt +++ b/libc/config/linux/x86_64/entrypoints.txt @@ -252,6 +252,7 @@ set(TARGET_LIBC_ENTRYPOINTS libc.src.sys.mman.munmap libc.src.sys.mman.remap_file_pages libc.src.sys.mman.posix_madvise + libc.src.sys.mman.process_mrelease libc.src.sys.mman.shm_open libc.src.sys.mman.shm_unlink diff --git a/libc/include/sys/syscall.h.def b/libc/include/sys/syscall.h.def index 03c19eb0885ed..11758ea8336dd 100644 --- a/libc/include/sys/syscall.h.def +++ b/libc/include/sys/syscall.h.def @@ -2349,5 +2349,12 @@ #define SYS_writev __NR_writev #endif +#ifdef __NR_process_mrelease +#define SYS_process_mrelease __NR_process_mrelease +#endif + +#ifdef __NR_pidfd_open +#define SYS_pidfd_open __NR_pidfd_open +#endif #endif // LLVM_LIBC_SYS_SYSCALL_H diff --git a/libc/newhdrgen/yaml/sys/mman.yaml b/libc/newhdrgen/yaml/sys/mman.yaml index 962ca3591917f..dd53eb60d1ec5 100644 --- a/libc/newhdrgen/yaml/sys/mman.yaml +++ b/libc/newhdrgen/yaml/sys/mman.yaml @@ -132,3 +132,10 @@ functions: return_type: int arguments: - type: const char * + - name: process_mrelease + standards: + - Linux + return_type: int + arguments: + - type: int + - type: unsigned int diff --git a/libc/spec/linux.td b/libc/spec/linux.td index 9b5dc8e30c95e..99e0949a592df 100644 --- a/libc/spec/linux.td +++ b/libc/spec/linux.td @@ -112,6 +112,12 @@ def Linux : StandardSpec<"Linux"> { ArgSpec, ArgSpec, ArgSpec, + FunctionSpec< + "process_mrelease", + RetValSpec, + [ + ArgSpec, + ArgSpec ] >, FunctionSpec< diff --git a/libc/src/sys/mman/CMakeLists.txt b/libc/src/sys/mman/CMakeLists.txt index 4d4c2ad376050..d5059d615abc3 100644 --- a/libc/src/sys/mman/CMakeLists.txt +++ b/libc/src/sys/mman/CMakeLists.txt @@ -2,114 +2,39 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS}) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS}) endif() -add_entrypoint_object( - madvise - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.madvise -) - -add_entrypoint_object( - mmap - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.mmap -) - -add_entrypoint_object( - munmap - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.munmap -) - -add_entrypoint_object( - mprotect - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.mprotect -) - -add_entrypoint_object( - posix_madvise - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.posix_madvise -) - -add_entrypoint_object( - mincore - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.mincore -) - -add_entrypoint_object( - mlock - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.mlock -) - -add_entrypoint_object( - mlock2 - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.mlock2 -) - -add_entrypoint_object( - munlock - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.munlock -) - -add_entrypoint_object( - mlockall - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.mlockall -) - -add_entrypoint_object( - munlockall - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.munlockall -) - -add_entrypoint_object( - msync - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.msync -) - -add_entrypoint_object( - remap_file_pages - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.remap_file_pages -) - -add_entrypoint_object( - shm_open - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.shm_open -) - -add_entrypoint_object( - shm_unlink - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.shm_unlink -) - -add_entrypoint_object( - mremap - ALIAS - DEPENDS - .${LIBC_TARGET_OS}.mremap -) +add_entrypoint_object(madvise ALIAS DEPENDS .${LIBC_TARGET_OS}.madvise) + +add_entrypoint_object(mmap ALIAS DEPENDS .${LIBC_TARGET_OS}.mmap) + +add_entrypoint_object(munmap ALIAS DEPENDS .${LIBC_TARGET_OS}.munmap) + +add_entrypoint_object(mprotect ALIAS DEPENDS .${LIBC_TARGET_OS}.mprotect) + +add_entrypoint_object(posix_madvise ALIAS DEPENDS + .${LIBC_TARGET_OS}.posix_madvise) + +add_entrypoint_object(mincore ALIAS DEPENDS .${LIBC_TARGET_OS}.mincore) + +add_entrypoint_object(mlock ALIAS DEPENDS .${LIBC_TARGET_OS}.mlock) + +add_entrypoint_object(mlock2 ALIAS DEPENDS .${LIBC_TARGET_OS}.mlock2) + +add_entrypoint_object(munlock ALIAS DEPENDS .${LIBC_TARGET_OS}.munlock) + +add_entrypoint_object(mlockall ALIAS DEPENDS .${LIBC_TARGET_OS}.mlockall) + +add_entrypoint_object(munlockall ALIAS DEPENDS .${LIBC_TARGET_OS}.munlockall) + +add_entrypoint_object(msync ALIAS DEPENDS .${LIBC_TARGET_OS}.msync) + +add_entrypoint_object(remap_file_pages ALIAS DEPENDS + .${LIBC_TARGET_OS}.remap_file_pages) + +add_entrypoint_object(shm_open ALIAS DEPENDS .${LIBC_TARGET_OS}.shm_open) + +add_entrypoint_object(shm_unlink ALIAS DEPENDS .${LIBC_TARGET_OS}.shm_unlink) + +add_entrypoint_object(mremap ALIAS DEPENDS .${LIBC_TARGET_OS}.mremap) + +add_entrypoint_object(process_mrelease ALIAS DEPENDS + .${LIBC_TARGET_OS}.process_mrelease) diff --git a/libc/src/sys/mman/linux/CMakeLists.txt b/libc/src/sys/mman/linux/CMakeLists.txt index 89a0ad1527a06..7fb3ba8682e01 100644 --- a/libc/src/sys/mman/linux/CMakeLists.txt +++ b/libc/src/sys/mman/linux/CMakeLists.txt @@ -1,28 +1,26 @@ add_entrypoint_object( madvise SRCS - madvise.cpp + madvise.cpp HDRS - ../madvise.h + ../madvise.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno -) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno) add_entrypoint_object( mmap SRCS - mmap.cpp + mmap.cpp HDRS - ../mmap.h + ../mmap.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno -) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno) add_entrypoint_object( mremap @@ -40,177 +38,176 @@ add_entrypoint_object( add_entrypoint_object( munmap SRCS - munmap.cpp + munmap.cpp HDRS - ../munmap.h + ../munmap.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno -) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno) add_entrypoint_object( mprotect SRCS - mprotect.cpp + mprotect.cpp HDRS - ../mprotect.h + ../mprotect.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno -) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno) add_entrypoint_object( posix_madvise SRCS - posix_madvise.cpp + posix_madvise.cpp HDRS - ../posix_madvise.h + ../posix_madvise.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil -) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil) add_entrypoint_object( mincore SRCS - mincore.cpp + mincore.cpp HDRS - ../mincore.h + ../mincore.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno -) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno) add_entrypoint_object( mlock SRCS - mlock.cpp + mlock.cpp HDRS - ../mlock.h + ../mlock.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno -) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno) add_entrypoint_object( mlock2 SRCS - mlock2.cpp + mlock2.cpp HDRS - ../mlock2.h + ../mlock2.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno -) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno) add_entrypoint_object( munlock SRCS - munlock.cpp + munlock.cpp HDRS - ../munlock.h + ../munlock.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno -) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno) add_entrypoint_object( mlockall SRCS - mlockall.cpp + mlockall.cpp HDRS - ../mlockall.h + ../mlockall.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno -) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno) add_entrypoint_object( munlockall SRCS - munlockall.cpp + munlockall.cpp HDRS - ../munlockall.h + ../munlockall.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno -) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno) add_entrypoint_object( msync SRCS - msync.cpp + msync.cpp HDRS - ../msync.h + ../msync.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno -) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno) add_entrypoint_object( remap_file_pages SRCS - remap_file_pages.cpp + remap_file_pages.cpp HDRS - ../remap_file_pages.h + ../remap_file_pages.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno -) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno) add_header_library( shm_common HDRS - shm_common.h + shm_common.h DEPENDS - libc.src.__support.CPP.array - libc.src.__support.CPP.string_view - libc.src.__support.CPP.optional - libc.src.__support.common - libc.src.errno.errno - libc.src.string.memory_utils.inline_memcpy -) + libc.src.__support.CPP.array + libc.src.__support.CPP.string_view + libc.src.__support.CPP.optional + libc.src.__support.common + libc.src.errno.errno + libc.src.string.memory_utils.inline_memcpy) add_entrypoint_object( shm_open SRCS - shm_open.cpp + shm_open.cpp HDRS - ../shm_open.h + ../shm_open.h DEPENDS - libc.src.fcntl.open - libc.hdr.types.mode_t - .shm_common -) + libc.src.fcntl.open + libc.hdr.types.mode_t + .shm_common) add_entrypoint_object( shm_unlink SRCS - shm_unlink.cpp + shm_unlink.cpp HDRS - ../shm_unlink.h + ../shm_unlink.h DEPENDS - libc.src.unistd.unlink - .shm_common -) + libc.src.unistd.unlink + .shm_common) + +add_entrypoint_object( + process_mrelease + SRCS + process_mrelease.cpp + HDRS + ../process_mrelease.h + DEPENDS + libc.include.signal + libc.src.signal.kill + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno) diff --git a/libc/src/sys/mman/linux/process_mrelease.cpp b/libc/src/sys/mman/linux/process_mrelease.cpp new file mode 100644 index 0000000000000..d71b1289c3e92 --- /dev/null +++ b/libc/src/sys/mman/linux/process_mrelease.cpp @@ -0,0 +1,33 @@ +//===---------- Linux implementation of the mrelease function -----------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "src/sys/mman/process_mrelease.h" + +#include "src/__support/OSUtil/syscall.h" // For internal syscall function. +#include "src/__support/common.h" + +#include "src/__support/macros/config.h" +#include "src/errno/libc_errno.h" +#include // For EXEC_PAGESIZE. +#include // For syscall numbers. + +namespace LIBC_NAMESPACE_DECL { + +LLVM_LIBC_FUNCTION(int, process_mrelease, (int pidfd, unsigned int flags)) { + long ret = + LIBC_NAMESPACE::syscall_impl(SYS_process_mrelease, pidfd, flags); + + if (ret < 0) { + libc_errno = static_cast(-ret); + return libc_errno; + } + + return 0; +} + +} // namespace LIBC_NAMESPACE_DECL diff --git a/libc/src/sys/mman/process_mrelease.h b/libc/src/sys/mman/process_mrelease.h new file mode 100644 index 0000000000000..13a9ba57eae19 --- /dev/null +++ b/libc/src/sys/mman/process_mrelease.h @@ -0,0 +1,22 @@ +//===-- Implementation header for process_mrelease function -----------------*- +// C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIBC_SRC_SYS_MMAN_PROCESS_MRELEASE_H +#define LLVM_LIBC_SRC_SYS_MMAN_PROCESS_MRELEASE_H + +#include "src/__support/macros/config.h" +#include // For size_t and off_t + +namespace LIBC_NAMESPACE_DECL { + +int process_mrelease(int pidfd, unsigned int flags); + +} // namespace LIBC_NAMESPACE_DECL + +#endif // LLVM_LIBC_SRC_SYS_MMAN_PROCESS_MRELEASE_H diff --git a/libc/test/src/sys/mman/linux/CMakeLists.txt b/libc/test/src/sys/mman/linux/CMakeLists.txt index 44ed11aadfe8b..16d83ea427437 100644 --- a/libc/test/src/sys/mman/linux/CMakeLists.txt +++ b/libc/test/src/sys/mman/linux/CMakeLists.txt @@ -3,16 +3,15 @@ add_custom_target(libc_sys_mman_unittests) add_libc_unittest( mmap_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - mmap_test.cpp + mmap_test.cpp DEPENDS - libc.include.sys_mman - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.test.UnitTest.ErrnoSetterMatcher -) + libc.include.sys_mman + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.test.UnitTest.ErrnoSetterMatcher) add_libc_unittest( mremap_test @@ -30,154 +29,172 @@ add_libc_unittest( ) if (NOT LLVM_USE_SANITIZER) +if(NOT LLVM_USE_SANITIZER) add_libc_unittest( mprotect_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - mprotect_test.cpp + mprotect_test.cpp DEPENDS - libc.include.sys_mman - libc.include.signal - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.sys.mman.mprotect - libc.test.UnitTest.ErrnoSetterMatcher - ) + libc.include.sys_mman + libc.include.signal + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.sys.mman.mprotect + libc.test.UnitTest.ErrnoSetterMatcher) endif() add_libc_unittest( madvise_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS madvise_test.cpp DEPENDS - libc.include.sys_mman - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.sys.mman.madvise - libc.test.UnitTest.ErrnoSetterMatcher -) - + libc.include.sys_mman + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.sys.mman.madvise + libc.test.UnitTest.ErrnoSetterMatcher) add_libc_unittest( posix_madvise_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS posix_madvise_test.cpp DEPENDS - libc.include.sys_mman - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.sys.mman.posix_madvise - libc.test.UnitTest.ErrnoSetterMatcher -) + libc.include.sys_mman + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.sys.mman.posix_madvise + libc.test.UnitTest.ErrnoSetterMatcher) add_libc_unittest( mincore_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - mincore_test.cpp + mincore_test.cpp DEPENDS - libc.include.sys_mman - libc.include.unistd - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.sys.mman.madvise - libc.src.sys.mman.mincore - libc.src.sys.mman.mlock - libc.src.sys.mman.munlock - libc.src.unistd.sysconf - libc.test.UnitTest.ErrnoSetterMatcher -) + libc.include.sys_mman + libc.include.unistd + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.sys.mman.madvise + libc.src.sys.mman.mincore + libc.src.sys.mman.mlock + libc.src.sys.mman.munlock + libc.src.unistd.sysconf + libc.test.UnitTest.ErrnoSetterMatcher) add_libc_unittest( mlock_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - mlock_test.cpp + mlock_test.cpp DEPENDS - libc.include.sys_mman - libc.include.unistd - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.sys.mman.madvise - libc.src.sys.mman.mincore - libc.src.sys.mman.mlock - libc.src.sys.mman.mlock2 - libc.src.sys.mman.munlock - libc.src.sys.mman.mlockall - libc.src.sys.mman.munlockall - libc.src.sys.resource.getrlimit - libc.src.__support.OSUtil.osutil - libc.src.unistd.sysconf - libc.test.UnitTest.ErrnoSetterMatcher -) + libc.include.sys_mman + libc.include.unistd + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.sys.mman.madvise + libc.src.sys.mman.mincore + libc.src.sys.mman.mlock + libc.src.sys.mman.mlock2 + libc.src.sys.mman.munlock + libc.src.sys.mman.mlockall + libc.src.sys.mman.munlockall + libc.src.sys.resource.getrlimit + libc.src.__support.OSUtil.osutil + libc.src.unistd.sysconf + libc.test.UnitTest.ErrnoSetterMatcher) add_libc_unittest( msync_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - msync_test.cpp + msync_test.cpp DEPENDS - libc.include.sys_mman - libc.include.unistd - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.sys.mman.msync - libc.src.sys.mman.mincore - libc.src.sys.mman.mlock - libc.src.sys.mman.munlock - libc.src.unistd.sysconf - libc.test.UnitTest.ErrnoSetterMatcher -) + libc.include.sys_mman + libc.include.unistd + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.sys.mman.msync + libc.src.sys.mman.mincore + libc.src.sys.mman.mlock + libc.src.sys.mman.munlock + libc.src.unistd.sysconf + libc.test.UnitTest.ErrnoSetterMatcher) add_libc_unittest( remap_file_pages_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - remap_file_pages_test.cpp + remap_file_pages_test.cpp DEPENDS - libc.include.sys_mman - libc.include.sys_stat - libc.src.unistd.sysconf - libc.test.UnitTest.ErrnoSetterMatcher - libc.src.sys.mman.remap_file_pages - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap -) + libc.include.sys_mman + libc.include.sys_stat + libc.src.unistd.sysconf + libc.test.UnitTest.ErrnoSetterMatcher + libc.src.sys.mman.remap_file_pages + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap) add_libc_unittest( shm_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - shm_test.cpp + shm_test.cpp DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.errno.errno - libc.src.fcntl.fcntl - libc.src.sys.mman.shm_open - libc.src.sys.mman.shm_unlink - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.unistd.ftruncate - libc.src.unistd.close - libc.src.__support.OSUtil.osutil - libc.hdr.fcntl_macros - libc.test.UnitTest.ErrnoSetterMatcher -) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.errno.errno + libc.src.fcntl.fcntl + libc.src.sys.mman.shm_open + libc.src.sys.mman.shm_unlink + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.unistd.ftruncate + libc.src.unistd.close + libc.src.__support.OSUtil.osutil + libc.hdr.fcntl_macros + libc.test.UnitTest.ErrnoSetterMatcher) + +add_libc_unittest( + process_mrelease_test + SUITE + libc_sys_mman_unittests + SRCS + process_mrelease_test.cpp + DEPENDS + libc.include.sys_mman + libc.include.sys_syscall + libc.src.errno.errno + libc.src.fcntl.fcntl + libc.include.sys_wait + libc.src.sys.wait.waitpid + libc.src.sys.mman.process_mrelease + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.unistd.ftruncate + libc.src.unistd.close + libc.src.__support.OSUtil.osutil + libc.test.UnitTest.ErrnoSetterMatcher) + +# add_libc_unittest( process_mrelease_test SUITE libc_sys_mman_unittests SRCS +# process_mrelease_test.cpp DEPENDS libc.include.sys_mman +# libc.include.sys_syscall libc.src.errno.errno +# libc.src.sys.mman.process_mrelease libc.test.UnitTest.ErrnoSetterMatcher) diff --git a/libc/test/src/sys/mman/linux/process_mrelease_test.cpp b/libc/test/src/sys/mman/linux/process_mrelease_test.cpp new file mode 100644 index 0000000000000..960e97b7aadde --- /dev/null +++ b/libc/test/src/sys/mman/linux/process_mrelease_test.cpp @@ -0,0 +1,74 @@ +//===-- Unittests for process_mrelease +//-------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +#include "src/__support/OSUtil/syscall.h" // For internal syscall function. +#include "src/__support/threads/sleep.h" +#include "src/errno/libc_errno.h" +#include "src/signal/kill.h" +#include "src/stdlib/exit.h" +#include "src/sys/mman/process_mrelease.h" +#include "src/unistd/close.h" +#include "src/unistd/fork.h" +#include "test/UnitTest/LibcTest.h" + +#include + +int pidfd_open(pid_t pid, unsigned int flags) { + return LIBC_NAMESPACE::syscall_impl(SYS_pidfd_open, pid, flags); +} + +TEST(LlvmLibcMProcessMReleaseTest, NoError) { + pid_t child_pid = LIBC_NAMESPACE::fork(); + + EXPECT_GE(child_pid, 0); + + if (child_pid == 0) { + // Child process: wait a bit then exit gracefully. + LIBC_NAMESPACE::sleep_briefly(); + LIBC_NAMESPACE::exit(0); + } else { + // Parent process: wait a bit and then kill the child. + // Give child process some time to start. + LIBC_NAMESPACE::sleep_briefly(); + int pidfd = pidfd_open(child_pid, 0); + EXPECT_GE(pidfd, 0); + + // Send SIGKILL to child process + LIBC_NAMESPACE::kill(child_pid, SIGKILL); + + EXPECT_EQ(LIBC_NAMESPACE::process_mrelease(pidfd, 0), 0); + + LIBC_NAMESPACE::close(pidfd); + } +} + +TEST(LlvmLibcMProcessMReleaseTest, ErrorNotKilled) { + pid_t child_pid = fork(); + + EXPECT_GE(child_pid, 0); + + if (child_pid == 0) { + // Child process: wait a bit then exit gracefully. + LIBC_NAMESPACE::sleep_briefly(); + LIBC_NAMESPACE::exit(0); + } else { + // Give child process some time to start. + LIBC_NAMESPACE::sleep_briefly(); + int pidfd = pidfd_open(child_pid, 0); + EXPECT_GE(pidfd, 0); + + ASSERT_EQ(LIBC_NAMESPACE::process_mrelease(pidfd, 0), EINVAL); + + LIBC_NAMESPACE::close(pidfd); + } +} + +TEST(LlvmLibcMProcessMReleaseTest, ErrorNonExistingPidfd) { + + ASSERT_EQ(LIBC_NAMESPACE::process_mrelease(12345, 0), EBADF); +} From 6c43ec77b33163b6b5b63f85c42d9f75c8af3225 Mon Sep 17 00:00:00 2001 From: moar55 Date: Sun, 24 Nov 2024 19:58:32 +0100 Subject: [PATCH 2/9] reformat --- libc/src/sys/mman/CMakeLists.txt | 152 ++++++++--- libc/src/sys/mman/linux/CMakeLists.txt | 217 ++++++++-------- libc/test/src/sys/mman/linux/CMakeLists.txt | 241 +++++++++--------- .../sys/mman/linux/process_mrelease_test.cpp | 4 +- 4 files changed, 352 insertions(+), 262 deletions(-) diff --git a/libc/src/sys/mman/CMakeLists.txt b/libc/src/sys/mman/CMakeLists.txt index d5059d615abc3..7d71f14ff8837 100644 --- a/libc/src/sys/mman/CMakeLists.txt +++ b/libc/src/sys/mman/CMakeLists.txt @@ -2,39 +2,119 @@ if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS}) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS}) endif() -add_entrypoint_object(madvise ALIAS DEPENDS .${LIBC_TARGET_OS}.madvise) - -add_entrypoint_object(mmap ALIAS DEPENDS .${LIBC_TARGET_OS}.mmap) - -add_entrypoint_object(munmap ALIAS DEPENDS .${LIBC_TARGET_OS}.munmap) - -add_entrypoint_object(mprotect ALIAS DEPENDS .${LIBC_TARGET_OS}.mprotect) - -add_entrypoint_object(posix_madvise ALIAS DEPENDS - .${LIBC_TARGET_OS}.posix_madvise) - -add_entrypoint_object(mincore ALIAS DEPENDS .${LIBC_TARGET_OS}.mincore) - -add_entrypoint_object(mlock ALIAS DEPENDS .${LIBC_TARGET_OS}.mlock) - -add_entrypoint_object(mlock2 ALIAS DEPENDS .${LIBC_TARGET_OS}.mlock2) - -add_entrypoint_object(munlock ALIAS DEPENDS .${LIBC_TARGET_OS}.munlock) - -add_entrypoint_object(mlockall ALIAS DEPENDS .${LIBC_TARGET_OS}.mlockall) - -add_entrypoint_object(munlockall ALIAS DEPENDS .${LIBC_TARGET_OS}.munlockall) - -add_entrypoint_object(msync ALIAS DEPENDS .${LIBC_TARGET_OS}.msync) - -add_entrypoint_object(remap_file_pages ALIAS DEPENDS - .${LIBC_TARGET_OS}.remap_file_pages) - -add_entrypoint_object(shm_open ALIAS DEPENDS .${LIBC_TARGET_OS}.shm_open) - -add_entrypoint_object(shm_unlink ALIAS DEPENDS .${LIBC_TARGET_OS}.shm_unlink) - -add_entrypoint_object(mremap ALIAS DEPENDS .${LIBC_TARGET_OS}.mremap) - -add_entrypoint_object(process_mrelease ALIAS DEPENDS - .${LIBC_TARGET_OS}.process_mrelease) +add_entrypoint_object( + madvise + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.madvise +) + +add_entrypoint_object( + mmap + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.mmap +) + +add_entrypoint_object( + munmap + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.munmap +) + +add_entrypoint_object( + mprotect + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.mprotect +) + +add_entrypoint_object( + posix_madvise + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.posix_madvise +) + +add_entrypoint_object( + mincore + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.mincore +) + +add_entrypoint_object( + mlock + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.mlock +) + +add_entrypoint_object( + mlock2 + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.mlock2 +) + +add_entrypoint_object( + munlock + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.munlock +) + +add_entrypoint_object( + mlockall + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.mlockall +) + +add_entrypoint_object( + munlockall + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.munlockall +) + +add_entrypoint_object( + msync + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.msync +) + +add_entrypoint_object( + remap_file_pages + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.remap_file_pages +) + +add_entrypoint_object( + shm_open + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.shm_open +) + +add_entrypoint_object( + shm_unlink + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.shm_unlink +) + +add_entrypoint_object( + mremap + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.mremap +) +add_entrypoint_object( + process_mrelease + ALIAS + DEPENDS + .${LIBC_TARGET_OS}.process_mrelease) diff --git a/libc/src/sys/mman/linux/CMakeLists.txt b/libc/src/sys/mman/linux/CMakeLists.txt index 7fb3ba8682e01..23a8486a9e12d 100644 --- a/libc/src/sys/mman/linux/CMakeLists.txt +++ b/libc/src/sys/mman/linux/CMakeLists.txt @@ -1,26 +1,28 @@ add_entrypoint_object( madvise SRCS - madvise.cpp + madvise.cpp HDRS - ../madvise.h + ../madvise.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno +) add_entrypoint_object( mmap SRCS - mmap.cpp + mmap.cpp HDRS - ../mmap.h + ../mmap.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno +) add_entrypoint_object( mremap @@ -34,180 +36,193 @@ add_entrypoint_object( libc.src.__support.OSUtil.osutil libc.src.errno.errno ) - add_entrypoint_object( munmap SRCS - munmap.cpp + munmap.cpp HDRS - ../munmap.h + ../munmap.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno +) add_entrypoint_object( mprotect SRCS - mprotect.cpp + mprotect.cpp HDRS - ../mprotect.h + ../mprotect.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno +) add_entrypoint_object( posix_madvise SRCS - posix_madvise.cpp + posix_madvise.cpp HDRS - ../posix_madvise.h + ../posix_madvise.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil +) add_entrypoint_object( mincore SRCS - mincore.cpp + mincore.cpp HDRS - ../mincore.h + ../mincore.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno +) add_entrypoint_object( mlock SRCS - mlock.cpp + mlock.cpp HDRS - ../mlock.h + ../mlock.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno +) add_entrypoint_object( mlock2 SRCS - mlock2.cpp + mlock2.cpp HDRS - ../mlock2.h + ../mlock2.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno +) add_entrypoint_object( munlock SRCS - munlock.cpp + munlock.cpp HDRS - ../munlock.h + ../munlock.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno +) add_entrypoint_object( mlockall SRCS - mlockall.cpp + mlockall.cpp HDRS - ../mlockall.h + ../mlockall.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno +) add_entrypoint_object( munlockall SRCS - munlockall.cpp + munlockall.cpp HDRS - ../munlockall.h + ../munlockall.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno +) add_entrypoint_object( msync SRCS - msync.cpp + msync.cpp HDRS - ../msync.h + ../msync.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno +) add_entrypoint_object( remap_file_pages SRCS - remap_file_pages.cpp + remap_file_pages.cpp HDRS - ../remap_file_pages.h + ../remap_file_pages.h DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno +) add_header_library( shm_common HDRS - shm_common.h + shm_common.h DEPENDS - libc.src.__support.CPP.array - libc.src.__support.CPP.string_view - libc.src.__support.CPP.optional - libc.src.__support.common - libc.src.errno.errno - libc.src.string.memory_utils.inline_memcpy) + libc.src.__support.CPP.array + libc.src.__support.CPP.string_view + libc.src.__support.CPP.optional + libc.src.__support.common + libc.src.errno.errno + libc.src.string.memory_utils.inline_memcpy +) add_entrypoint_object( shm_open SRCS - shm_open.cpp + shm_open.cpp HDRS - ../shm_open.h + ../shm_open.h DEPENDS - libc.src.fcntl.open - libc.hdr.types.mode_t - .shm_common) + libc.src.fcntl.open + libc.hdr.types.mode_t + .shm_common +) add_entrypoint_object( shm_unlink SRCS - shm_unlink.cpp + shm_unlink.cpp HDRS - ../shm_unlink.h + ../shm_unlink.h DEPENDS - libc.src.unistd.unlink - .shm_common) + libc.src.unistd.unlink + .shm_common +) add_entrypoint_object( process_mrelease SRCS - process_mrelease.cpp + process_mrelease.cpp HDRS - ../process_mrelease.h + ../process_mrelease.h DEPENDS - libc.include.signal - libc.src.signal.kill - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil - libc.src.errno.errno) + libc.include.signal + libc.src.signal.kill + libc.include.sys_syscall + libc.src.__support.OSUtil.osutil + libc.src.errno.errno) diff --git a/libc/test/src/sys/mman/linux/CMakeLists.txt b/libc/test/src/sys/mman/linux/CMakeLists.txt index 16d83ea427437..87fcc8a25812b 100644 --- a/libc/test/src/sys/mman/linux/CMakeLists.txt +++ b/libc/test/src/sys/mman/linux/CMakeLists.txt @@ -1,17 +1,16 @@ -add_custom_target(libc_sys_mman_unittests) - add_libc_unittest( mmap_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - mmap_test.cpp + mmap_test.cpp DEPENDS - libc.include.sys_mman - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.test.UnitTest.ErrnoSetterMatcher) + libc.include.sys_mman + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.test.UnitTest.ErrnoSetterMatcher +) add_libc_unittest( mremap_test @@ -29,172 +28,170 @@ add_libc_unittest( ) if (NOT LLVM_USE_SANITIZER) -if(NOT LLVM_USE_SANITIZER) add_libc_unittest( mprotect_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - mprotect_test.cpp + mprotect_test.cpp DEPENDS - libc.include.sys_mman - libc.include.signal - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.sys.mman.mprotect - libc.test.UnitTest.ErrnoSetterMatcher) + libc.include.sys_mman + libc.include.signal + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.sys.mman.mprotect + libc.test.UnitTest.ErrnoSetterMatcher + ) endif() add_libc_unittest( madvise_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS madvise_test.cpp DEPENDS - libc.include.sys_mman - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.sys.mman.madvise - libc.test.UnitTest.ErrnoSetterMatcher) + libc.include.sys_mman + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.sys.mman.madvise + libc.test.UnitTest.ErrnoSetterMatcher +) + add_libc_unittest( posix_madvise_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS posix_madvise_test.cpp DEPENDS - libc.include.sys_mman - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.sys.mman.posix_madvise - libc.test.UnitTest.ErrnoSetterMatcher) + libc.include.sys_mman + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.sys.mman.posix_madvise + libc.test.UnitTest.ErrnoSetterMatcher +) add_libc_unittest( mincore_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - mincore_test.cpp + mincore_test.cpp DEPENDS - libc.include.sys_mman - libc.include.unistd - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.sys.mman.madvise - libc.src.sys.mman.mincore - libc.src.sys.mman.mlock - libc.src.sys.mman.munlock - libc.src.unistd.sysconf - libc.test.UnitTest.ErrnoSetterMatcher) + libc.include.sys_mman + libc.include.unistd + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.sys.mman.madvise + libc.src.sys.mman.mincore + libc.src.sys.mman.mlock + libc.src.sys.mman.munlock + libc.src.unistd.sysconf + libc.test.UnitTest.ErrnoSetterMatcher +) add_libc_unittest( mlock_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - mlock_test.cpp + mlock_test.cpp DEPENDS - libc.include.sys_mman - libc.include.unistd - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.sys.mman.madvise - libc.src.sys.mman.mincore - libc.src.sys.mman.mlock - libc.src.sys.mman.mlock2 - libc.src.sys.mman.munlock - libc.src.sys.mman.mlockall - libc.src.sys.mman.munlockall - libc.src.sys.resource.getrlimit - libc.src.__support.OSUtil.osutil - libc.src.unistd.sysconf - libc.test.UnitTest.ErrnoSetterMatcher) + libc.include.sys_mman + libc.include.unistd + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.sys.mman.madvise + libc.src.sys.mman.mincore + libc.src.sys.mman.mlock + libc.src.sys.mman.mlock2 + libc.src.sys.mman.munlock + libc.src.sys.mman.mlockall + libc.src.sys.mman.munlockall + libc.src.sys.resource.getrlimit + libc.src.__support.OSUtil.osutil + libc.src.unistd.sysconf + libc.test.UnitTest.ErrnoSetterMatcher +) add_libc_unittest( msync_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - msync_test.cpp + msync_test.cpp DEPENDS - libc.include.sys_mman - libc.include.unistd - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.sys.mman.msync - libc.src.sys.mman.mincore - libc.src.sys.mman.mlock - libc.src.sys.mman.munlock - libc.src.unistd.sysconf - libc.test.UnitTest.ErrnoSetterMatcher) + libc.include.sys_mman + libc.include.unistd + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.sys.mman.msync + libc.src.sys.mman.mincore + libc.src.sys.mman.mlock + libc.src.sys.mman.munlock + libc.src.unistd.sysconf + libc.test.UnitTest.ErrnoSetterMatcher +) add_libc_unittest( remap_file_pages_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - remap_file_pages_test.cpp + remap_file_pages_test.cpp DEPENDS - libc.include.sys_mman - libc.include.sys_stat - libc.src.unistd.sysconf - libc.test.UnitTest.ErrnoSetterMatcher - libc.src.sys.mman.remap_file_pages - libc.src.errno.errno - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap) + libc.include.sys_mman + libc.include.sys_stat + libc.src.unistd.sysconf + libc.test.UnitTest.ErrnoSetterMatcher + libc.src.sys.mman.remap_file_pages + libc.src.errno.errno + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap +) add_libc_unittest( shm_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - shm_test.cpp + shm_test.cpp DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.errno.errno - libc.src.fcntl.fcntl - libc.src.sys.mman.shm_open - libc.src.sys.mman.shm_unlink - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.unistd.ftruncate - libc.src.unistd.close - libc.src.__support.OSUtil.osutil - libc.hdr.fcntl_macros - libc.test.UnitTest.ErrnoSetterMatcher) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.errno.errno + libc.src.fcntl.fcntl + libc.src.sys.mman.shm_open + libc.src.sys.mman.shm_unlink + libc.src.sys.mman.mmap + libc.src.sys.mman.munmap + libc.src.unistd.ftruncate + libc.src.unistd.close + libc.src.__support.OSUtil.osutil + libc.hdr.fcntl_macros + libc.test.UnitTest.ErrnoSetterMatcher +) add_libc_unittest( process_mrelease_test SUITE - libc_sys_mman_unittests + libc_sys_mman_unittests SRCS - process_mrelease_test.cpp + process_mrelease_test.cpp DEPENDS - libc.include.sys_mman - libc.include.sys_syscall - libc.src.errno.errno - libc.src.fcntl.fcntl - libc.include.sys_wait - libc.src.sys.wait.waitpid - libc.src.sys.mman.process_mrelease - libc.src.sys.mman.mmap - libc.src.sys.mman.munmap - libc.src.unistd.ftruncate - libc.src.unistd.close - libc.src.__support.OSUtil.osutil - libc.test.UnitTest.ErrnoSetterMatcher) - -# add_libc_unittest( process_mrelease_test SUITE libc_sys_mman_unittests SRCS -# process_mrelease_test.cpp DEPENDS libc.include.sys_mman -# libc.include.sys_syscall libc.src.errno.errno -# libc.src.sys.mman.process_mrelease libc.test.UnitTest.ErrnoSetterMatcher) + libc.include.sys_mman + libc.include.sys_syscall + libc.src.errno.errno + libc.src.sys.mman.process_mrelease + libc.src.unistd.close + libc.src.stdlib.exit + libc.src.__support.OSUtil.osutil + libc.src.__support.threads.sleep) diff --git a/libc/test/src/sys/mman/linux/process_mrelease_test.cpp b/libc/test/src/sys/mman/linux/process_mrelease_test.cpp index 960e97b7aadde..aa47b1ebf9fdc 100644 --- a/libc/test/src/sys/mman/linux/process_mrelease_test.cpp +++ b/libc/test/src/sys/mman/linux/process_mrelease_test.cpp @@ -23,8 +23,7 @@ int pidfd_open(pid_t pid, unsigned int flags) { } TEST(LlvmLibcMProcessMReleaseTest, NoError) { - pid_t child_pid = LIBC_NAMESPACE::fork(); - + pid_t child_pid = fork(); EXPECT_GE(child_pid, 0); if (child_pid == 0) { @@ -49,7 +48,6 @@ TEST(LlvmLibcMProcessMReleaseTest, NoError) { TEST(LlvmLibcMProcessMReleaseTest, ErrorNotKilled) { pid_t child_pid = fork(); - EXPECT_GE(child_pid, 0); if (child_pid == 0) { From b0300f10ae0462b63c4f470c9b8ea8c319d74fa4 Mon Sep 17 00:00:00 2001 From: moar55 Date: Sun, 24 Nov 2024 20:35:31 +0100 Subject: [PATCH 3/9] fix cmakelist --- libc/src/sys/mman/CMakeLists.txt | 1 + libc/test/src/sys/mman/linux/CMakeLists.txt | 2 ++ 2 files changed, 3 insertions(+) diff --git a/libc/src/sys/mman/CMakeLists.txt b/libc/src/sys/mman/CMakeLists.txt index 7d71f14ff8837..281efc0ffcdf2 100644 --- a/libc/src/sys/mman/CMakeLists.txt +++ b/libc/src/sys/mman/CMakeLists.txt @@ -113,6 +113,7 @@ add_entrypoint_object( DEPENDS .${LIBC_TARGET_OS}.mremap ) + add_entrypoint_object( process_mrelease ALIAS diff --git a/libc/test/src/sys/mman/linux/CMakeLists.txt b/libc/test/src/sys/mman/linux/CMakeLists.txt index 87fcc8a25812b..c4e8de2b14d80 100644 --- a/libc/test/src/sys/mman/linux/CMakeLists.txt +++ b/libc/test/src/sys/mman/linux/CMakeLists.txt @@ -1,3 +1,5 @@ +add_custom_target(libc_sys_mman_unittests) + add_libc_unittest( mmap_test SUITE From d2dbf1f6597c176c49f5d03e55cb1adbd02e2026 Mon Sep 17 00:00:00 2001 From: moar55 Date: Mon, 25 Nov 2024 08:56:22 +0100 Subject: [PATCH 4/9] add missing target --- libc/src/sys/mman/linux/CMakeLists.txt | 2 -- libc/test/src/sys/mman/linux/CMakeLists.txt | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libc/src/sys/mman/linux/CMakeLists.txt b/libc/src/sys/mman/linux/CMakeLists.txt index 23a8486a9e12d..aa2ca4b160181 100644 --- a/libc/src/sys/mman/linux/CMakeLists.txt +++ b/libc/src/sys/mman/linux/CMakeLists.txt @@ -221,8 +221,6 @@ add_entrypoint_object( HDRS ../process_mrelease.h DEPENDS - libc.include.signal - libc.src.signal.kill libc.include.sys_syscall libc.src.__support.OSUtil.osutil libc.src.errno.errno) diff --git a/libc/test/src/sys/mman/linux/CMakeLists.txt b/libc/test/src/sys/mman/linux/CMakeLists.txt index c4e8de2b14d80..35dcf832729be 100644 --- a/libc/test/src/sys/mman/linux/CMakeLists.txt +++ b/libc/test/src/sys/mman/linux/CMakeLists.txt @@ -194,6 +194,8 @@ add_libc_unittest( libc.src.errno.errno libc.src.sys.mman.process_mrelease libc.src.unistd.close + libc.src.signal.kill + libc.include.signal libc.src.stdlib.exit libc.src.__support.OSUtil.osutil libc.src.__support.threads.sleep) From a04d481517f8827cf262900d608a8c4b4293b5fe Mon Sep 17 00:00:00 2001 From: moar55 Date: Tue, 26 Nov 2024 12:32:42 +0100 Subject: [PATCH 5/9] address comments --- libc/src/sys/mman/linux/process_mrelease.cpp | 2 +- libc/src/sys/mman/process_mrelease.h | 5 ++--- libc/test/src/sys/mman/linux/process_mrelease_test.cpp | 9 ++++++++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/libc/src/sys/mman/linux/process_mrelease.cpp b/libc/src/sys/mman/linux/process_mrelease.cpp index d71b1289c3e92..e86bbec1b1b66 100644 --- a/libc/src/sys/mman/linux/process_mrelease.cpp +++ b/libc/src/sys/mman/linux/process_mrelease.cpp @@ -24,7 +24,7 @@ LLVM_LIBC_FUNCTION(int, process_mrelease, (int pidfd, unsigned int flags)) { if (ret < 0) { libc_errno = static_cast(-ret); - return libc_errno; + return -1; } return 0; diff --git a/libc/src/sys/mman/process_mrelease.h b/libc/src/sys/mman/process_mrelease.h index 13a9ba57eae19..ec4a6e4768bca 100644 --- a/libc/src/sys/mman/process_mrelease.h +++ b/libc/src/sys/mman/process_mrelease.h @@ -1,11 +1,10 @@ -//===-- Implementation header for process_mrelease function -----------------*- -// C++ -*-===// +//===-- Implementation header for process_mrelease function --------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -//===----------------------------------------------------------------------===// +//===-------------------------------------------------------------------------===// #ifndef LLVM_LIBC_SRC_SYS_MMAN_PROCESS_MRELEASE_H #define LLVM_LIBC_SRC_SYS_MMAN_PROCESS_MRELEASE_H diff --git a/libc/test/src/sys/mman/linux/process_mrelease_test.cpp b/libc/test/src/sys/mman/linux/process_mrelease_test.cpp index aa47b1ebf9fdc..1b98f74e9b63b 100644 --- a/libc/test/src/sys/mman/linux/process_mrelease_test.cpp +++ b/libc/test/src/sys/mman/linux/process_mrelease_test.cpp @@ -1,3 +1,10 @@ +//===-- Unittests for process_mrelease ------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// //===-- Unittests for process_mrelease //-------------------------------------===// // @@ -68,5 +75,5 @@ TEST(LlvmLibcMProcessMReleaseTest, ErrorNotKilled) { TEST(LlvmLibcMProcessMReleaseTest, ErrorNonExistingPidfd) { - ASSERT_EQ(LIBC_NAMESPACE::process_mrelease(12345, 0), EBADF); + ASSERT_EQ(LIBC_NAMESPACE::process_mrelease(-1, 0), EBADF); } From 363a917219b8c0cd413ab76299a71d700ef75634 Mon Sep 17 00:00:00 2001 From: moar55 Date: Tue, 26 Nov 2024 21:39:54 +0100 Subject: [PATCH 6/9] fix license --- libc/test/src/sys/mman/linux/process_mrelease_test.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/libc/test/src/sys/mman/linux/process_mrelease_test.cpp b/libc/test/src/sys/mman/linux/process_mrelease_test.cpp index 1b98f74e9b63b..3349a5ee0a548 100644 --- a/libc/test/src/sys/mman/linux/process_mrelease_test.cpp +++ b/libc/test/src/sys/mman/linux/process_mrelease_test.cpp @@ -5,14 +5,7 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -//===-- Unittests for process_mrelease -//-------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// + #include "src/__support/OSUtil/syscall.h" // For internal syscall function. #include "src/__support/threads/sleep.h" #include "src/errno/libc_errno.h" From 3f393a17e9c9b0ec8d8cf6de69610f24d6bbc35d Mon Sep 17 00:00:00 2001 From: moar55 Date: Wed, 27 Nov 2024 08:19:44 +0100 Subject: [PATCH 7/9] check against errno --- libc/test/src/sys/mman/linux/CMakeLists.txt | 4 +++- libc/test/src/sys/mman/linux/process_mrelease_test.cpp | 10 ++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/libc/test/src/sys/mman/linux/CMakeLists.txt b/libc/test/src/sys/mman/linux/CMakeLists.txt index 35dcf832729be..6021ccd8c89a8 100644 --- a/libc/test/src/sys/mman/linux/CMakeLists.txt +++ b/libc/test/src/sys/mman/linux/CMakeLists.txt @@ -198,4 +198,6 @@ add_libc_unittest( libc.include.signal libc.src.stdlib.exit libc.src.__support.OSUtil.osutil - libc.src.__support.threads.sleep) + libc.src.__support.threads.sleep + libc.test.UnitTest.ErrnoSetterMatcher + ) diff --git a/libc/test/src/sys/mman/linux/process_mrelease_test.cpp b/libc/test/src/sys/mman/linux/process_mrelease_test.cpp index 3349a5ee0a548..1c3c549aa9beb 100644 --- a/libc/test/src/sys/mman/linux/process_mrelease_test.cpp +++ b/libc/test/src/sys/mman/linux/process_mrelease_test.cpp @@ -14,10 +14,13 @@ #include "src/sys/mman/process_mrelease.h" #include "src/unistd/close.h" #include "src/unistd/fork.h" +#include "test/UnitTest/ErrnoSetterMatcher.h" #include "test/UnitTest/LibcTest.h" #include +using namespace LIBC_NAMESPACE::testing::ErrnoSetterMatcher; + int pidfd_open(pid_t pid, unsigned int flags) { return LIBC_NAMESPACE::syscall_impl(SYS_pidfd_open, pid, flags); } @@ -40,7 +43,7 @@ TEST(LlvmLibcMProcessMReleaseTest, NoError) { // Send SIGKILL to child process LIBC_NAMESPACE::kill(child_pid, SIGKILL); - EXPECT_EQ(LIBC_NAMESPACE::process_mrelease(pidfd, 0), 0); + EXPECT_THAT(LIBC_NAMESPACE::process_mrelease(pidfd, 0), Succeeds()); LIBC_NAMESPACE::close(pidfd); } @@ -60,13 +63,12 @@ TEST(LlvmLibcMProcessMReleaseTest, ErrorNotKilled) { int pidfd = pidfd_open(child_pid, 0); EXPECT_GE(pidfd, 0); - ASSERT_EQ(LIBC_NAMESPACE::process_mrelease(pidfd, 0), EINVAL); + EXPECT_THAT(LIBC_NAMESPACE::process_mrelease(pidfd, 0), Fails(EINVAL)); LIBC_NAMESPACE::close(pidfd); } } TEST(LlvmLibcMProcessMReleaseTest, ErrorNonExistingPidfd) { - - ASSERT_EQ(LIBC_NAMESPACE::process_mrelease(-1, 0), EBADF); + EXPECT_THAT(LIBC_NAMESPACE::process_mrelease(-1, 0), Fails(EBADF)); } From 017564c09b235ea30e3d2e87603ec0e222342b7d Mon Sep 17 00:00:00 2001 From: moar55 Date: Wed, 27 Nov 2024 20:12:52 +0100 Subject: [PATCH 8/9] fix formatting --- libc/src/sys/mman/process_mrelease.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libc/src/sys/mman/process_mrelease.h b/libc/src/sys/mman/process_mrelease.h index ec4a6e4768bca..6c800f2d0eab8 100644 --- a/libc/src/sys/mman/process_mrelease.h +++ b/libc/src/sys/mman/process_mrelease.h @@ -1,10 +1,10 @@ -//===-- Implementation header for process_mrelease function --------*- C++ -*-===// +//===-- Implementation header for process_mrelease function -*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -//===-------------------------------------------------------------------------===// +//===------------------------------------------------------------------===// #ifndef LLVM_LIBC_SRC_SYS_MMAN_PROCESS_MRELEASE_H #define LLVM_LIBC_SRC_SYS_MMAN_PROCESS_MRELEASE_H From 111456a6a3a8866580cdfed99e8d24c31c611387 Mon Sep 17 00:00:00 2001 From: moar55 Date: Wed, 27 Nov 2024 20:53:16 +0100 Subject: [PATCH 9/9] address comments --- libc/test/src/sys/mman/linux/CMakeLists.txt | 2 +- libc/test/src/sys/mman/linux/process_mrelease_test.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libc/test/src/sys/mman/linux/CMakeLists.txt b/libc/test/src/sys/mman/linux/CMakeLists.txt index 6021ccd8c89a8..1a5ff3af8eb11 100644 --- a/libc/test/src/sys/mman/linux/CMakeLists.txt +++ b/libc/test/src/sys/mman/linux/CMakeLists.txt @@ -200,4 +200,4 @@ add_libc_unittest( libc.src.__support.OSUtil.osutil libc.src.__support.threads.sleep libc.test.UnitTest.ErrnoSetterMatcher - ) +) diff --git a/libc/test/src/sys/mman/linux/process_mrelease_test.cpp b/libc/test/src/sys/mman/linux/process_mrelease_test.cpp index 1c3c549aa9beb..56a7d66ee7a5a 100644 --- a/libc/test/src/sys/mman/linux/process_mrelease_test.cpp +++ b/libc/test/src/sys/mman/linux/process_mrelease_test.cpp @@ -25,7 +25,7 @@ int pidfd_open(pid_t pid, unsigned int flags) { return LIBC_NAMESPACE::syscall_impl(SYS_pidfd_open, pid, flags); } -TEST(LlvmLibcMProcessMReleaseTest, NoError) { +TEST(LlvmLibcProcessMReleaseTest, NoError) { pid_t child_pid = fork(); EXPECT_GE(child_pid, 0); @@ -49,7 +49,7 @@ TEST(LlvmLibcMProcessMReleaseTest, NoError) { } } -TEST(LlvmLibcMProcessMReleaseTest, ErrorNotKilled) { +TEST(LlvmLibcProcessMReleaseTest, ErrorNotKilled) { pid_t child_pid = fork(); EXPECT_GE(child_pid, 0); @@ -69,6 +69,6 @@ TEST(LlvmLibcMProcessMReleaseTest, ErrorNotKilled) { } } -TEST(LlvmLibcMProcessMReleaseTest, ErrorNonExistingPidfd) { +TEST(LlvmLibcProcessMReleaseTest, ErrorNonExistingPidfd) { EXPECT_THAT(LIBC_NAMESPACE::process_mrelease(-1, 0), Fails(EBADF)); }