| PINSYSCALLS(2) | System Calls Manual | PINSYSCALLS(2) |
pinsyscalls — pin
system call entry to precise locations in the address space
#include
<sys/types.h>
int
pinsyscalls(void
*start, size_t len,
u_int *pintable,
int npins);
The
pinsyscalls()
system call specifies the start to
start + len address space range where the system call
entry instructions are found, and a npins-sized array
of u_int entries (indexed by the system call number) which are offsets from
the start.
This provides the precise location for the system call instruction
required for each system call number. Attempting to use a different system
call entry instruction to perform a non-corresponding system call operation
will fail with signal SIGABRT.
pinsyscalls()
is only called by the shared library linker
ld.so(1) to tell the kernel where
the text / executable region containing system calls is found in the dynamic
library libc.so (the filename is actually
/usr/lib/libc.so.major.minor). This has to happen before additional threads
are created.
A similar setup operation is done automatically by the kernel for the system calls found in ld.so(1) and in static executables.
Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.
pinsyscalls() will fail if:
The pinsyscalls() system call first
appeared in OpenBSD 7.5.
| April 6, 2025 | openbsd |