summaryrefslogtreecommitdiff
path: root/manual
diff options
context:
space:
mode:
authorYury Khrustalev <yury.khrustalev@arm.com>2025-06-20 13:37:34 +0100
committerYury Khrustalev <yury.khrustalev@arm.com>2025-10-06 16:48:07 +0100
commitb96031cb5662f0b7a086c869ea265de922b4de7e (patch)
tree471b2efed9d82846be432941334481baa1cdcfb9 /manual
parented5b1fad62c26fa0138320cd3a69719d074e4926 (diff)
manual: describe syscall numbers not supported via syscall()
The syscall() function allows to make system calls directly, however, in the case of system calls that affect internal state of process or thread, the caller would have to take care of extensive setup necessary for the internals of Glibc to work correctly in the child threads. This may make using syscall() with these syscall numbers impractical and prone to undefined behaviour. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'manual')
-rw-r--r--manual/startup.texi7
1 files changed, 6 insertions, 1 deletions
diff --git a/manual/startup.texi b/manual/startup.texi
index 9545fcc526..11fe58c5a6 100644
--- a/manual/startup.texi
+++ b/manual/startup.texi
@@ -737,6 +737,12 @@ anyway.
@code{syscall} does not provide cancellation logic, even if the system
call you're calling is listed as cancellable above.
+Using @code{syscall} with system calls that affect the internal state of
+process of thread will likely result in undefined behavior. For this reason,
+at least the following system call numbers are not supported when invoked via
+@code{syscall}: @code{SYS_clone}, @code{SYS_clone2}, @code{SYS_clone3},
+@code{SYS_rt_sigreturn}, @code{SYS_sigreturn}, @code{SYS_vfork}.
+
@code{syscall} is declared in @file{unistd.h}.
@deftypefun {long int} syscall (long int @var{sysno}, @dots{})
@@ -804,7 +810,6 @@ if (rc == -1)
@end deftypefun
-
@node Program Termination
@section Program Termination
@cindex program termination