arch_prctl - set architecture-specific thread state
SYNOPSIS
#include <asm/prctl.h> #include <sys/prctl.h>int arch_prctl(int code, unsigned long addr);int arch_prctl(int code, unsigned long *addr);
DESCRIPTION
The
arch_prctl()
function sets architecture-specific process or thread state.
code
selects a subfunction
and passes argument
addr
to it;
addr
is interpreted as either an
unsigned long
for the "set" operations, or as an
unsigned long *,
for the "get" operations.
Sub functions for x86-64 are:
ARCH_SET_FS
Set the 64-bit base for the
FS
register to
addr.
ARCH_GET_FS
Return the 64-bit base value for the
FS
register of the current thread in the
unsigned long
pointed to by
addr.
ARCH_SET_GS
Set the 64-bit base for the
GS
register to
addr.
ARCH_GET_GS
Return the 64-bit base value for the
GS
register of the current thread in the
unsigned long
pointed to by
addr.
RETURN VALUE
On success,
arch_prctl()
returns 0; on error, -1 is returned, and
errno
is set to indicate the error.
ERRORS
EFAULT
addr
points to an unmapped address or is outside the process address space.
EINVAL
code
is not a valid subcommand.
EPERM
addr
is outside the process address space.
CONFORMING TO
arch_prctl()
is a Linux/x86-64 extension and should not be used in programs intended
to be portable.
NOTES
arch_prctl()
is only supported on Linux/x86-64 for 64-bit programs currently.
The 64-bit base changes when a new 32-bit segment selector is loaded.
ARCH_SET_GS
is disabled in some kernels.
Context switches for 64-bit segment bases are rather expensive.
It may be a faster alternative to set a 32-bit base using a
segment selector by setting up an LDT with
modify_ldt(2)
or using the
set_thread_area(2)
system call in kernel 2.5 or later.
arch_prctl()
is only needed when you want to set bases that are larger than 4GB.
Memory in the first 2GB of address space can be allocated by using
mmap(2)
with the
MAP_32BIT
flag.
As of version 2.7, glibc provides no prototype for
arch_prctl().
You have to declare it yourself for now.
This may be fixed in future glibc versions.
This page is part of release 3.14 of the Linux
man-pages
project.
A description of the project,
and information about reporting bugs,
can be found at
http://www.kernel.org/doc/man-pages/.