NAME
pinsyscalls
—
pin system call entry to precise
locations in the address space
SYNOPSIS
#include
<sys/types.h>
int
pinsyscalls
(void
*start, size_t len,
u_int *pintable,
int npins);
DESCRIPTION
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).
A similar setup operation is done automatically by the kernel for the system calls found in ld.so(1) and in static executables.
RETURN VALUES
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.
ERRORS
pinsyscalls
() will fail if:
- [
E2BIG
] - Implausible number of system calls provided.
- [
ENOMEM
] - Insufficient memory to service the request.
- [
EPERM
] - A static binary tried to call
pinsyscalls
(), or it was called a second time. - [
ERANGE
] - At least one system call offset is beyond the bounds of len.
HISTORY
The pinsyscalls
() system call first
appeared in OpenBSD 7.4.