.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2003 Andi Kleen .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH arch_prctl 2 "2 мая 2024 г." "Справочные страницы Linux 6.9.1" .SH НАИМЕНОВАНИЕ arch_prctl \- настроить состояние нити (зависит от архитектуры) .SH БИБЛИОТЕКА Стандартная библиотека языка C (\fIlibc\fP, \fI\-lc\fP) .SH ОБЗОР .nf \fB#include \fP /* определения констант \fBARCH_*\fP */ \fB#include \fP /* определения констант \fBSYS_*\fP */ \fB#include \fP .P \fBint syscall(SYS_arch_prctl, int \fP\fIop\fP\fB, unsigned long \fP\fIaddr\fP\fB);\fP \fBint syscall(SYS_arch_prctl, int \fP\fIop\fP\fB, unsigned long *\fP\fIaddr\fP\fB);\fP .fi .P \fIПримечание\fP: glibc не предоставляет оболочку для \fBarch_prctl\fP(), что требует использования \fBsyscall\fP(2). .SH ОПИСАНИЕ \fBarch_prctl\fP() sets architecture\-specific process or thread state. \fIop\fP selects an operation and passes argument \fIaddr\fP to it; \fIaddr\fP is interpreted as either an \fIunsigned long\fP for the "set" operations, or as an \fIunsigned long\ *\fP, for the "get" operations. .P Подфункции для x86 и x86\-64: .TP \fBARCH_SET_CPUID\fP (начиная с Linux 4.12) .\" commit e9ea1e7f53b852147cbd568b0568c7ad97ec21a3 Enable (\fIaddr != 0\fP) or disable (\fIaddr == 0\fP) the \fIcpuid\fP instruction for the calling thread. The instruction is enabled by default. If disabled, any execution of a \fIcpuid\fP instruction will instead generate a \fBSIGSEGV\fP signal. This feature can be used to emulate \fIcpuid\fP results that differ from what the underlying hardware would have produced (e.g., in a paravirtualization setting). .IP The \fBARCH_SET_CPUID\fP setting is preserved across \fBfork\fP(2) and \fBclone\fP(2) but reset to the default (i.e., \fIcpuid\fP enabled) on \fBexecve\fP(2). .TP \fBARCH_GET_CPUID\fP (начиная с Linux 4.12) Return the setting of the flag manipulated by \fBARCH_SET_CPUID\fP as the result of the system call (1 for enabled, 0 for disabled). \fIaddr\fP is ignored. .TP Подфункции только для x86\-64: .TP \fBARCH_SET_FS\fP Установить 64\-битную базу для регистра \fIFS\fP равной \fIaddr\fP. .TP \fBARCH_GET_FS\fP Return the 64\-bit base value for the \fIFS\fP register of the calling thread in the \fIunsigned long\fP pointed to by \fIaddr\fP. .TP \fBARCH_SET_GS\fP Установить 64\-битную базу для регистра \fIGS\fP равной \fIaddr\fP. .TP \fBARCH_GET_GS\fP Return the 64\-bit base value for the \fIGS\fP register of the calling thread in the \fIunsigned long\fP pointed to by \fIaddr\fP. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" При успешном выполнении \fBarch_prctl\fP() возвращает 0; при ошибке \(em \-1, а в \fIerrno\fP задаётся причина ошибки. .SH ОШИБКИ .TP \fBEFAULT\fP В \fIaddr\fP задан не выделенный адрес или вне адресного пространства процесса. .TP \fBEINVAL\fP \fIop\fP \- недопустимая операция. .TP \fBENODEV\fP \fBARCH_SET_CPUID\fP был запрошен, но базовое оборудование не поддерживает сбой CPUID. .TP \fBEPERM\fP .\" .SH AUTHOR .\" Man page written by Andi Kleen. \fIaddr\fP лежит вне адресного пространства процесса. .SH СТАНДАРТЫ Linux/x86\-64. .SH ПРИМЕЧАНИЯ В настоящее время \fBarch_prctl\fP() поддерживается только на Linux/x86\-64 для 64\-битных программ. .P 64\-битная база изменяется при загрузке нового 32\-битного сегментного селектора. .P \fBARCH_SET_GS\fP выключена в некоторых ядрах. .P Переключение контекстов для 64\-битных сегментных баз — довольно затратная операция. В качестве оптимизации, если используется 3\-битные базовые адреса TLS, \fBarch_prctl\fP() может использовать реальную запись TLS, как при вызове \fBset_thread_area\fP(2), а не изменять сегментный базовый регистр напрямую. Память в первых 2\ ГБ адресного пространства может быть выделена через \fBmmap\fP(2) с флагом \fBMAP_32BIT\fP. .P Из\-за вышеупомянутой оптимизации, использование \fBarch_prctl\fP() и \fBset_thread_area\fP(2) в той же нити опасно, так как они могут перезаписать TLS\-записи друг друга. .P \fIFS\fP уже может использоваться библиотекой нитей. Программы, в которых используется \fBARCH_SET_FS\fP напрямую, весьма вероятно завершаться с ошибкой. .SH "СМОТРИТЕ ТАКЖЕ" \fBmmap\fP(2), \fBmodify_ldt\fP(2), \fBprctl\fP(2), \fBset_thread_area\fP(2) .P Руководство программиста для AMD X86\-64 .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Dmitry Bolkhovskikh , Yuri Kozlov и Kirill Rekhov . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .