41 lines
1.6 KiB
Diff
41 lines
1.6 KiB
Diff
commit b96031cb5662f0b7a086c869ea265de922b4de7e
|
|
Author: Yury Khrustalev <yury.khrustalev@arm.com>
|
|
Date: Fri Jun 20 13:37:34 2025 +0100
|
|
|
|
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>
|
|
|
|
diff --git a/manual/startup.texi b/manual/startup.texi
|
|
index 9545fcc526..11fe58c5a6 100644
|
|
--- a/manual/startup.texi
|
|
+++ b/manual/startup.texi
|
|
@@ -736,6 +736,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
|