Enhanced glibc documentation for core descriptor APIs.
- Backport: manual: add dup3 - Backport: manual: add syscalls - Adapt man pages version downstream Resolves: RHEL-107861
This commit is contained in:
parent
5e0f6b30b8
commit
5a17d40420
27
glibc-RHEL-107861-1.patch
Normal file
27
glibc-RHEL-107861-1.patch
Normal file
@ -0,0 +1,27 @@
|
||||
commit a07e000e82cb71238259e674529c37c12dc7d423
|
||||
Author: DJ Delorie <dj@redhat.com>
|
||||
Date: Fri May 10 17:34:29 2024 -0400
|
||||
|
||||
manual: add dup3
|
||||
|
||||
Reviewed-by: Florian Weimer <fweimer@redhat.com>
|
||||
|
||||
diff --git a/manual/llio.texi b/manual/llio.texi
|
||||
index a65230d612eba7bf..513ba9e8859b8e6e 100644
|
||||
--- a/manual/llio.texi
|
||||
+++ b/manual/llio.texi
|
||||
@@ -3443,6 +3443,14 @@ middle of calling @code{dup2} at which @var{new} is closed and not yet a
|
||||
duplicate of @var{old}.
|
||||
@end deftypefun
|
||||
|
||||
+@deftypefun int dup3 (int @var{old}, int @var{new}, int @var{flags})
|
||||
+@standards{Linux, unistd.h}
|
||||
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
||||
+This function is the same as @code{dup2} but creates the new
|
||||
+descriptor as if it had been opened with flags @var{flags}. The only
|
||||
+allowed flag is @code{O_CLOEXEC}.
|
||||
+@end deftypefun
|
||||
+
|
||||
@deftypevr Macro int F_DUPFD
|
||||
@standards{POSIX.1, fcntl.h}
|
||||
This macro is used as the @var{command} argument to @code{fcntl}, to
|
348
glibc-RHEL-107861-2.patch
Normal file
348
glibc-RHEL-107861-2.patch
Normal file
@ -0,0 +1,348 @@
|
||||
commit 6c0be74305745c8f78bcfb69442c8c379459d99b
|
||||
Author: DJ Delorie <dj@redhat.com>
|
||||
Date: Mon Jul 8 17:52:15 2024 -0400
|
||||
|
||||
manual: add syscalls
|
||||
|
||||
The purpose of this patch is to add some system calls that (1) aren't
|
||||
otherwise documented, and (2) are merely redirected to the kernel, so
|
||||
can refer to their documentation; and define a standard way of doing
|
||||
so in the future. A more detailed explaination of how system calls
|
||||
are wrapped is added along with reference to the Linux Man-Pages
|
||||
project.
|
||||
|
||||
Default version of man-pages is in configure.ac but can be overridden
|
||||
by --with-man-pages=X.Y
|
||||
|
||||
Reviewed-by: Alejandro Colomar <alx@kernel.org>
|
||||
|
||||
Conflicts:
|
||||
configure (skip unrelated configure changes, due to autoconf
|
||||
call)
|
||||
|
||||
diff --git a/config.make.in b/config.make.in
|
||||
index 55e8b7563b961dfc..36096881b7af4574 100644
|
||||
--- a/config.make.in
|
||||
+++ b/config.make.in
|
||||
@@ -91,6 +91,7 @@ use-nscd = @use_nscd@
|
||||
build-hardcoded-path-in-tests= @hardcoded_path_in_tests@
|
||||
build-pt-chown = @build_pt_chown@
|
||||
pthread-in-libc = @pthread_in_libc@
|
||||
+man-pages-version = @man_pages_version@
|
||||
|
||||
# Build tools.
|
||||
CC = @CC@
|
||||
diff --git a/configure b/configure
|
||||
index 432e40a59295cffd..c25b93dd0b317e4e 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -706,6 +706,7 @@ force_install
|
||||
bindnow
|
||||
hardcoded_path_in_tests
|
||||
enable_timezone_tools
|
||||
+man_pages_version
|
||||
rtld_early_cflags
|
||||
extra_nonshared_cflags
|
||||
sysheaders
|
||||
@@ -787,6 +788,7 @@ with_headers
|
||||
with_nonshared_cflags
|
||||
with_rtld_early_cflags
|
||||
with_timeoutfactor
|
||||
+with_man_pages
|
||||
enable_sanity_checks
|
||||
enable_shared
|
||||
enable_profile
|
||||
@@ -1509,6 +1511,8 @@ Optional Packages:
|
||||
build early initialization with additional CFLAGS
|
||||
--with-timeoutfactor=NUM
|
||||
specify an integer to scale the timeout
|
||||
+ --with-man-pages=VERSION
|
||||
+ tie manual to a specific man-pages version
|
||||
--with-cpu=CPU select code for CPU variant
|
||||
|
||||
Some influential environment variables:
|
||||
@@ -4374,6 +4378,17 @@ fi
|
||||
printf "%s\n" "#define TIMEOUTFACTOR $timeoutfactor" >>confdefs.h
|
||||
|
||||
|
||||
+man_pages_version=6.9.1
|
||||
+
|
||||
+
|
||||
+# Check whether --with-man-pages was given.
|
||||
+if test ${with_man_pages+y}
|
||||
+then :
|
||||
+ withval=$with_man_pages; man_pages_version=$withval
|
||||
+fi
|
||||
+
|
||||
+
|
||||
+
|
||||
# Check whether --enable-sanity-checks was given.
|
||||
if test ${enable_sanity_checks+y}
|
||||
then :
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index bdc385d03c3dc7f5..f00fc36f387af09d 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -168,6 +168,15 @@ AC_ARG_WITH([timeoutfactor],
|
||||
[timeoutfactor=1])
|
||||
AC_DEFINE_UNQUOTED(TIMEOUTFACTOR, $timeoutfactor)
|
||||
|
||||
+man_pages_version=6.9.1
|
||||
+
|
||||
+AC_ARG_WITH([man-pages],
|
||||
+ AS_HELP_STRING([--with-man-pages=VERSION],
|
||||
+ [tie manual to a specific man-pages version]),
|
||||
+ [man_pages_version=$withval],
|
||||
+ [])
|
||||
+AC_SUBST(man_pages_version)
|
||||
+
|
||||
AC_ARG_ENABLE([sanity-checks],
|
||||
AS_HELP_STRING([--disable-sanity-checks],
|
||||
[really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]),
|
||||
diff --git a/manual/Makefile b/manual/Makefile
|
||||
index b5fda4a7ae07a785..a6c05db540d6c1da 100644
|
||||
--- a/manual/Makefile
|
||||
+++ b/manual/Makefile
|
||||
@@ -117,6 +117,7 @@ $(objpfx)stamp-pkgvers: $(common-objpfx)config.make
|
||||
echo "@set PKGVERSION_DEFAULT" >> $(objpfx)pkgvers-tmp; \
|
||||
fi
|
||||
echo "@set REPORT_BUGS_TO $(REPORT_BUGS_TEXI)" >> $(objpfx)pkgvers-tmp
|
||||
+ echo "@set man_pages_version $(man-pages-version)" >> $(objpfx)pkgvers-tmp; \
|
||||
echo "@end ifclear" >> $(objpfx)pkgvers-tmp
|
||||
$(move-if-change) $(objpfx)pkgvers-tmp $(objpfx)pkgvers.texi
|
||||
touch $@
|
||||
diff --git a/manual/intro.texi b/manual/intro.texi
|
||||
index ff43c5a7fbb969a0..879c1b38d9b73a46 100644
|
||||
--- a/manual/intro.texi
|
||||
+++ b/manual/intro.texi
|
||||
@@ -85,6 +85,7 @@ standards each function or symbol comes from.
|
||||
* Berkeley Unix:: BSD and SunOS.
|
||||
* SVID:: The System V Interface Description.
|
||||
* XPG:: The X/Open Portability Guide.
|
||||
+* Linux Kernel:: The Linux kernel.
|
||||
@end menu
|
||||
|
||||
@node ISO C, POSIX, , Standards and Portability
|
||||
@@ -941,7 +942,7 @@ inter-process communication and shared memory, the @code{hsearch} and
|
||||
@code{drand48} families of functions, @code{fmtmsg} and several of the
|
||||
mathematical functions.
|
||||
|
||||
-@node XPG, , SVID, Standards and Portability
|
||||
+@node XPG, Linux Kernel, SVID, Standards and Portability
|
||||
@subsection XPG (The X/Open Portability Guide)
|
||||
|
||||
The X/Open Portability Guide, published by the X/Open Company, Ltd., is
|
||||
@@ -960,6 +961,20 @@ fulfilling the XPG standard with the Unix extensions is a
|
||||
precondition for getting the Unix brand chances are good that the
|
||||
functionality is available on commercial systems.
|
||||
|
||||
+@node Linux Kernel, , XPG, Standards and Portability
|
||||
+@subsection Linux (The Linux Kernel)
|
||||
+
|
||||
+@Theglibc{} includes by reference the Linux man-pages
|
||||
+@value{man_pages_version} documentation to document the listed
|
||||
+syscalls for the Linux kernel. For reference purposes only the latest
|
||||
+@uref{https://www.kernel.org/doc/man-pages/,Linux man-pages Project}
|
||||
+documentation can be accessed from the
|
||||
+@uref{https://www.kernel.org,Linux kernel} website. Where the syscall
|
||||
+has more specific documentation in this manual that more specific
|
||||
+documentation is considered authoritative.
|
||||
+
|
||||
+Additional details on the Linux system call interface can be found in
|
||||
+@xref{System Calls}.
|
||||
|
||||
@node Using the Library, Roadmap to the Manual, Standards and Portability, Introduction
|
||||
@section Using the Library
|
||||
diff --git a/manual/llio.texi b/manual/llio.texi
|
||||
index 513ba9e8859b8e6e..17fe1181d5cc2cef 100644
|
||||
--- a/manual/llio.texi
|
||||
+++ b/manual/llio.texi
|
||||
@@ -65,6 +65,7 @@ directly.)
|
||||
* Interrupt Input:: Getting an asynchronous signal when
|
||||
input arrives.
|
||||
* IOCTLs:: Generic I/O Control operations.
|
||||
+* Other Low-Level I/O APIs:: Other low-level-I/O-related functions.
|
||||
@end menu
|
||||
|
||||
|
||||
@@ -2242,6 +2243,8 @@ file descriptor, or until the timeout period expires.
|
||||
There is another example showing the use of @code{select} to multiplex
|
||||
input from multiple sockets in @ref{Server Example}.
|
||||
|
||||
+For an alternate interface to this functionality, see @code{poll}
|
||||
+(@pxref{Other Low-Level I/O APIs}).
|
||||
|
||||
@node Synchronizing I/O
|
||||
@section Synchronizing I/O operations
|
||||
@@ -3325,7 +3328,9 @@ require additional arguments to be supplied. These additional arguments
|
||||
and the return value and error conditions are given in the detailed
|
||||
descriptions of the individual commands.
|
||||
|
||||
-Briefly, here is a list of what the various commands are.
|
||||
+Briefly, here is a list of what the various commands are. For an
|
||||
+exhaustive list of kernel-specific options, please see @xref{System
|
||||
+Calls}.
|
||||
|
||||
@vtable @code
|
||||
@item F_DUPFD
|
||||
@@ -4661,5 +4666,28 @@ Most IOCTLs are OS-specific and/or only used in special system utilities,
|
||||
and are thus beyond the scope of this document. For an example of the use
|
||||
of an IOCTL, see @ref{Out-of-Band Data}.
|
||||
|
||||
-@c FIXME this is undocumented:
|
||||
-@c dup3
|
||||
+@node Other Low-Level I/O APIs
|
||||
+@section Other low-level-I/O-related functions
|
||||
+
|
||||
+@deftp {Data Type} {struct pollfd}
|
||||
+@standards{POSIX.1,poll.h}
|
||||
+@end deftp
|
||||
+
|
||||
+@deftp {Data Type} {struct epoll_event}
|
||||
+@standards{Linux,sys/epoll.h}
|
||||
+@end deftp
|
||||
+
|
||||
+@deftypefun int poll (struct pollfd *@var{fds}, nfds_t @var{nfds}, int @var{timeout})
|
||||
+
|
||||
+@manpagefunctionstub{poll,2}
|
||||
+@end deftypefun
|
||||
+
|
||||
+@deftypefun int epoll_create(int @var{size})
|
||||
+
|
||||
+@manpagefunctionstub{epoll_create,2}
|
||||
+@end deftypefun
|
||||
+
|
||||
+@deftypefun int epoll_wait(int @var{epfd}, struct epoll_event *@var{events}, int @var{maxevents}, int @var{timeout})
|
||||
+
|
||||
+@manpagefunctionstub{epoll_wait,2}
|
||||
+@end deftypefun
|
||||
diff --git a/manual/macros.texi b/manual/macros.texi
|
||||
index 4a2e22f4730d2390..579da3fb81e59da0 100644
|
||||
--- a/manual/macros.texi
|
||||
+++ b/manual/macros.texi
|
||||
@@ -282,4 +282,11 @@ cwd\comments\
|
||||
@macro standardsx {element, standard, header}
|
||||
@end macro
|
||||
|
||||
+@macro manpagefunctionstub {func,sec}
|
||||
+This documentation is a stub. For additional information on this
|
||||
+function, consult the manual page
|
||||
+@url{https://man7.org/linux/man-pages/man\sec\/\func\.\sec\.html}.
|
||||
+@xref{Linux Kernel}.
|
||||
+@end macro
|
||||
+
|
||||
@end ifclear
|
||||
diff --git a/manual/socket.texi b/manual/socket.texi
|
||||
index f0e35d9e13175212..8708cbb07ca02b5c 100644
|
||||
--- a/manual/socket.texi
|
||||
+++ b/manual/socket.texi
|
||||
@@ -41,6 +41,7 @@ aren't documented either so far.
|
||||
is to make it work with Inetd.
|
||||
* Socket Options:: Miscellaneous low-level socket options.
|
||||
* Networks Database:: Accessing the database of network names.
|
||||
+* Other Socket APIs:: Other socket-related functions.
|
||||
@end menu
|
||||
|
||||
@node Socket Concepts
|
||||
@@ -3134,38 +3135,8 @@ You can use plain @code{recv} (@pxref{Receiving Data}) instead of
|
||||
treat all possible senders alike). Even @code{read} can be used if
|
||||
you don't want to specify @var{flags} (@pxref{I/O Primitives}).
|
||||
|
||||
-@ignore
|
||||
-@c sendmsg and recvmsg are like readv and writev in that they
|
||||
-@c use a series of buffers. It's not clear this is worth
|
||||
-@c supporting or that we support them.
|
||||
-@c !!! they can do more; it is hairy
|
||||
-
|
||||
-@deftp {Data Type} {struct msghdr}
|
||||
-@standards{BSD, sys/socket.h}
|
||||
-@end deftp
|
||||
-
|
||||
-@deftypefun ssize_t sendmsg (int @var{socket}, const struct msghdr *@var{message}, int @var{flags})
|
||||
-@standards{BSD, sys/socket.h}
|
||||
-@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
||||
-
|
||||
-This function is defined as a cancellation point in multi-threaded
|
||||
-programs, so one has to be prepared for this and make sure that
|
||||
-allocated resources (like memory, files descriptors, semaphores or
|
||||
-whatever) are freed even if the thread is cancel.
|
||||
-@c @xref{pthread_cleanup_push}, for a method how to do this.
|
||||
-@end deftypefun
|
||||
-
|
||||
-@deftypefun ssize_t recvmsg (int @var{socket}, struct msghdr *@var{message}, int @var{flags})
|
||||
-@standards{BSD, sys/socket.h}
|
||||
-@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
||||
-
|
||||
-This function is defined as a cancellation point in multi-threaded
|
||||
-programs, so one has to be prepared for this and make sure that
|
||||
-allocated resources (like memory, files descriptors, semaphores or
|
||||
-whatever) are freed even if the thread is canceled.
|
||||
-@c @xref{pthread_cleanup_push}, for a method how to do this.
|
||||
-@end deftypefun
|
||||
-@end ignore
|
||||
+If you need more flexibility and/or control over sending and receiving
|
||||
+packets, see @code{sendmsg} and @code{recvmsg} (@pxref{Other Socket APIs}).
|
||||
|
||||
@node Datagram Example
|
||||
@subsection Datagram Socket Example
|
||||
@@ -3664,3 +3635,20 @@ returns a null pointer if there are no more entries.
|
||||
@c libc_lock_unlock @aculock
|
||||
This function closes the networks database.
|
||||
@end deftypefun
|
||||
+
|
||||
+@node Other Socket APIs
|
||||
+@section Other Socket APIs
|
||||
+
|
||||
+@deftp {Data Type} {struct msghdr}
|
||||
+@standards{BSD, sys/socket.h}
|
||||
+@end deftp
|
||||
+
|
||||
+@deftypefun ssize_t sendmsg (int @var{socket}, const struct msghdr *@var{message}, int @var{flags})
|
||||
+
|
||||
+@manpagefunctionstub{sendmsg,2}
|
||||
+@end deftypefun
|
||||
+
|
||||
+@deftypefun ssize_t recvmsg (int @var{socket}, struct msghdr *@var{message}, int @var{flags})
|
||||
+
|
||||
+@manpagefunctionstub{recvmsg,2}
|
||||
+@end deftypefun
|
||||
diff --git a/manual/startup.texi b/manual/startup.texi
|
||||
index 9bf24123f562f75b..1426f5e1abfb2f51 100644
|
||||
--- a/manual/startup.texi
|
||||
+++ b/manual/startup.texi
|
||||
@@ -690,7 +690,25 @@ you don't need to know about it because you can just use @theglibc{}'s
|
||||
@code{chmod} function.
|
||||
|
||||
@cindex kernel call
|
||||
-System calls are sometimes called kernel calls.
|
||||
+System calls are sometimes called syscalls or kernel calls, and this
|
||||
+interface is mostly a purely mechanical translation from the kernel's
|
||||
+ABI to the C ABI. For the set of syscalls where we do not guarantee
|
||||
+POSIX Thread cancellation the wrappers only organize the incoming
|
||||
+arguments from the C calling convention to the calling convention of
|
||||
+the target kernel. For the set of syscalls where we provided POSIX
|
||||
+Thread cancellation the wrappers set some internal state in the
|
||||
+library to support cancellation, but this does not impact the
|
||||
+behaviour of the syscall provided by the kernel.
|
||||
+
|
||||
+In some cases, if @theglibc{} detects that a system call has been
|
||||
+superseded by a more capable one, the wrapper may map the old call to
|
||||
+the new one. For example, @code{dup2} is implemented via @code{dup3}
|
||||
+by passing an additional empty flags argument, and @code{open} calls
|
||||
+@code{openat} passing the additional @code{AT_FDCWD}. Sometimes even
|
||||
+more is done, such as converting between 32-bit and 64-bit time
|
||||
+values. In general, though, such processing is only to make the
|
||||
+system call better match the C ABI, rather than change its
|
||||
+functionality.
|
||||
|
||||
However, there are times when you want to make a system call explicitly,
|
||||
and for that, @theglibc{} provides the @code{syscall} function.
|
||||
@@ -712,6 +730,8 @@ we won't describe it here either because anyone who is coding
|
||||
library source code as a specification of the interface between them
|
||||
anyway.
|
||||
|
||||
+@code{syscall} does not provide cancellation logic, even if the system
|
||||
+call you're calling is listed as cancellable above.
|
||||
|
||||
@code{syscall} is declared in @file{unistd.h}.
|
||||
|
10
glibc.spec
10
glibc.spec
@ -80,6 +80,8 @@
|
||||
# glibc_shell_* below.
|
||||
%undefine _auto_set_build_flags
|
||||
|
||||
%define man_pages_version 6.06-3.el10
|
||||
|
||||
##############################################################################
|
||||
# Utility functions for pre/post scripts. Stick them at the beginning of
|
||||
# any lua %pre, %post, %postun, etc. sections to have them expand into
|
||||
@ -145,7 +147,7 @@ Version: %{glibcversion}
|
||||
# - It allows using the Release number without the %%dist tag in the dependency
|
||||
# generator to make the generated requires interchangeable between Rawhide
|
||||
# and ELN (.elnYY < .fcXX).
|
||||
%global baserelease 50
|
||||
%global baserelease 51
|
||||
Release: %{baserelease}%{?dist}
|
||||
|
||||
# Licenses:
|
||||
@ -615,6 +617,8 @@ Patch291: glibc-RHEL-106562-21.patch
|
||||
Patch292: glibc-RHEL-106562-22.patch
|
||||
Patch293: glibc-RHEL-106562-23.patch
|
||||
Patch294: glibc-RHEL-106562-24.patch
|
||||
Patch295: glibc-RHEL-107861-1.patch
|
||||
Patch296: glibc-RHEL-107861-2.patch
|
||||
|
||||
##############################################################################
|
||||
# Continued list of core "glibc" package information:
|
||||
@ -1630,6 +1634,7 @@ build()
|
||||
%ifarch aarch64
|
||||
--enable-memory-tagging \
|
||||
%endif
|
||||
--with-man-pages=%{man_pages_version} \
|
||||
--disable-crypt \
|
||||
--disable-build-nscd \
|
||||
--disable-nscd \
|
||||
@ -2627,6 +2632,9 @@ update_gconv_modules_cache ()
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Wed Aug 06 2025 Frédéric Bérat <fberat@redhat.com> - 2.39-51
|
||||
- Enhanced glibc documentation for core descriptor APIs. (RHEL-107861)
|
||||
|
||||
* Wed Aug 06 2025 Arjun Shankar <arjun@redhat.com> - 2.39-50
|
||||
- Improve test coverage (RHEL-106562)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user