Man page - arch_prctl(2)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

arch_prctl

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
СТАНДАРТЫ
ПРИМЕЧАНИЯ
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

НАИМЕНОВАНИЕ

arch_prctl - настроить состояние нити (зависит от архитектуры)

БИБЛИОТЕКА

Стандартная библиотека языка C ( libc , -lc )

ОБЗОР

#include <asm/prctl.h> /* определения констант ARCH_* */
#include <sys/syscall.h>
/* определения констант SYS_* */
#include <unistd.h>

int syscall(SYS_arch_prctl, int op , unsigned long addr );
int syscall(SYS_arch_prctl, int
op , unsigned long * addr );

Примечание : glibc не предоставляет оболочку для arch_prctl (), что требует использования syscall (2).

ОПИСАНИЕ

arch_prctl () sets architecture-specific process or thread state. op selects an operation 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.

Подфункции для x86 и x86-64:
ARCH_SET_CPUID
(начиная с Linux 4.12)

Enable ( addr != 0 ) or disable ( addr == 0 ) the cpuid instruction for the calling thread. The instruction is enabled by default. If disabled, any execution of a cpuid instruction will instead generate a SIGSEGV signal. This feature can be used to emulate cpuid results that differ from what the underlying hardware would have produced (e.g., in a paravirtualization setting).

The ARCH_SET_CPUID setting is preserved across fork (2) and clone (2) but reset to the default (i.e., cpuid enabled) on execve (2).

ARCH_GET_CPUID (начиная с Linux 4.12)

Return the setting of the flag manipulated by ARCH_SET_CPUID as the result of the system call (1 for enabled, 0 for disabled). addr is ignored.

Подфункции только для x86-64:
ARCH_SET_FS

Установить 64-битную базу для регистра FS равной addr .

ARCH_GET_FS

Return the 64-bit base value for the FS register of the calling thread in the unsigned long pointed to by addr .

ARCH_SET_GS

Установить 64-битную базу для регистра GS равной addr .

ARCH_GET_GS

Return the 64-bit base value for the GS register of the calling thread in the unsigned long pointed to by addr .

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении arch_prctl () возвращает 0; при ошибке — -1, а в errno задаётся причина ошибки.

ОШИБКИ

EFAULT

В addr задан не выделенный адрес или вне адресного пространства процесса.

EINVAL

op - недопустимая операция.

ENODEV

ARCH_SET_CPUID был запрошен, но базовое оборудование не поддерживает сбой CPUID.

EPERM

addr лежит вне адресного пространства процесса.

СТАНДАРТЫ

Linux/x86-64.

ПРИМЕЧАНИЯ

В настоящее время arch_prctl () поддерживается только на Linux/x86-64 для 64-битных программ.

64-битная база изменяется при загрузке нового 32-битного сегментного селектора.

ARCH_SET_GS выключена в некоторых ядрах.

Переключение контекстов для 64-битных сегментных баз — довольно затратная операция. В качестве оптимизации, если используется 3-битные базовые адреса TLS, arch_prctl () может использовать реальную запись TLS, как при вызове set_thread_area (2), а не изменять сегментный базовый регистр напрямую. Память в первых 2 ГБ адресного пространства может быть выделена через mmap (2) с флагом MAP_32BIT .

Из-за вышеупомянутой оптимизации, использование arch_prctl () и set_thread_area (2) в той же нити опасно, так как они могут перезаписать TLS-записи друг друга.

FS уже может использоваться библиотекой нитей. Программы, в которых используется ARCH_SET_FS напрямую, весьма вероятно завершаться с ошибкой.

СМОТРИТЕ ТАКЖЕ

mmap (2), modify_ldt (2), prctl (2), set_thread_area (2)

Руководство программиста для AMD X86-64

ПЕРЕВОД

Русский перевод этой страницы руководства разработал(и) Dmitry Bolkhovskikh <d20052005@yandex.ru>, Yuri Kozlov <yuray@komyakino.ru> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков .