ИМЯ arch_prctl - настроить состояние нити (зависит от архитектуры)
ОБЗОР #include <asm/prctl.h> #include <sys/prctl.h>
int arch_prctl(int code, unsigned long addr); int arch_prctl(int code, unsigned long *addr);
ОПИСАНИЕ Функция arch_prctl() задаёт состояние процесса или нити, зависящие от архитектуры. В аргументе code выбирается подфункция и ей передаётся значение addr; параметр addr рассматривается либо как unsigned long при операциях «установки», либо как unsigned long * при операциях «получения» значения.
Подфункции для x86-64:
ARCH_SET_FS Установить 64-битную базу для регистра FS равной addr.
ARCH_GET_FS Вернуть значение 64-битной базы для регистра FS текущей нити в ячейку длинной unsigned long, заданную адресом addr.
ARCH_SET_GS Установить 64-битную базу для регистра GS равной addr.
ARCH_GET_GS Вернуть значение 64-битной базы для регистра GS текущей нити в ячейку длинной unsigned long, заданную адресом addr.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ При успешном выполнении arch_prctl() возвращает 0; при ошибке — -1, а в errno задаётся причина ошибки.
ОШИБКИ EFAULT В addr задан не выделенный адрес или вне адресного пространства процесса.
EINVAL code не является допустимой подкомандой.
EPERM addr лежит вне адресного пространства процесса.
СООТВЕТСТВИЕ СТАНДАРТАМ arch_prctl() является расширением Linux/x86-64 и не должна использоваться в переносимых программах.
ЗАМЕЧАНИЯ В настоящее время arch_prctl() поддерживается только на Linux/x86-64 для 64-битных программ.
64-битная база изменяется при загрузке нового 32-битного сегментного селектора.
ARCH_SET_GS выключена в некоторых ядрах.
Переключение контекстов для 64-битных сегментных баз — довольно затратная операция. В качестве оптимизации, если используется 3-битные базовые адреса TLS, самостоятельно. Это может быть исправлено в новых версиях glibc.
FS уже может использоваться библиотекой нитей. Программы, в которых используется ARCH_SET_FS напрямую, весьма вероятно завершаться с ошибкой.
СМОТРИТЕ ТАКЖЕ mmap(2), modify_ldt(2), prctl(2), set_thread_area(2)
Руководство программиста для AMD X86-64
|