glibc/sysdeps/unix/sysv/linux/tst-mman-consts.py
Adhemerval Zanella f6e849fd7c linux: Add MAP_DROPPABLE from Linux 6.11
This request the page to be never written out to swap, it will be zeroed
under memory pressure (so kernel can just drop the page), it is inherited
by fork, it is not counted against @code{mlock} budget, and if there is
no enough memory to service a page faults there is no fatal error (so not
signal is sent).

Tested with build-many-glibcs.py.

Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
2024-10-10 10:27:53 -03:00

58 lines
2.3 KiB
Python

#!/usr/bin/python3
# Test that glibc's sys/mman.h constants match the kernel's.
# Copyright (C) 2018-2024 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
#
# The GNU C Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# The GNU C Library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with the GNU C Library; if not, see
# <https://www.gnu.org/licenses/>.
import argparse
import sys
import glibcextract
import glibcsyscalls
def main():
"""The main entry point."""
parser = argparse.ArgumentParser(
description="Test that glibc's sys/mman.h constants "
"match the kernel's.")
parser.add_argument('--cc', metavar='CC',
help='C compiler (including options) to use')
args = parser.parse_args()
linux_version_headers = glibcsyscalls.linux_kernel_version(args.cc)
linux_version_glibc = (6, 11)
sys.exit(glibcextract.compare_macro_consts(
'#define _GNU_SOURCE 1\n'
'#include <sys/mman.h>\n',
'#define _GNU_SOURCE 1\n'
'#include <linux/mman.h>\n',
args.cc,
'MAP_.*',
# MAP_UNINITIALIZED is defined by the kernel but not by glibc.
# MAP_FAILED is not a MAP_* flag and is glibc-only, as is the
# MAP_ANON alias for MAP_ANONYMOUS. MAP_RENAME, MAP_AUTOGROW,
# MAP_LOCAL and MAP_AUTORSRV are in the kernel header for
# MIPS, marked as "not used by linux"; SPARC has MAP_INHERIT
# in the kernel header, but does not use it. The kernel
# header for HPPA removed a define of MAP_VARIABLE to 0 in
# Linux 6.2.
'MAP_UNINITIALIZED|MAP_FAILED|MAP_ANON|MAP_RENAME|MAP_AUTOGROW'
'|MAP_LOCAL|MAP_AUTORSRV|MAP_INHERIT|MAP_VARIABLE',
linux_version_glibc > linux_version_headers,
linux_version_headers > linux_version_glibc))
if __name__ == '__main__':
main()