Man page - arch_prctl(2)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

ARCH_PRCTL

名 前
書 式
説 明
返 り 値
エ ラ ー
準 拠
注 意
関 連 項 目
こ の 文 書 に つ い て

名 前

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 は 、 "set" 操 作 で は unsigned long と し て 、 "get" 操 作 で は unsigned long * と し て 解 釈 さ れ る 。

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

FS レ ジ ス タ ー の 64 ビ ッ ト ベ ー ス を addr に 設 定 す る 。

ARCH_GET_FS

呼 び 出 し 元 の ス レ ッ ド の FS レ ジ ス タ ー の 64 ビ ッ ト ベ ー ス 値 を 、 addr が 指 す unsigned long の 領 域 に 格 納 す る 。

ARCH_SET_GS

GS レ ジ ス タ ー の 64 ビ ッ ト ベ ー ス を addr に 設 定 す る 。

ARCH_GET_GS

呼 び 出 し 元 の ス レ ッ ド の GS レ ジ ス タ ー の 64 ビ ッ ト ベ ー ス 値 を 、 addr が 指 す unsigned long の 領 域 に 格 納 す る 。

返 り 値

成 功 す る と 、 arch_prctl () は 0 を 返 す 。 エ ラ ー の 場 合 、 -1 を 返 し 、 errno を エ ラ ー を 示 す 値 に 設 定 す る 。

エ ラ ー

EFAULT

addr が ア ン マ ッ プ さ れ た ア ド レ ス を 指 し て い る か 、 プ ロ セ ス の ア ド レ ス 空 間 の 外 に あ る 。

EINVAL

code が 有 効 な サ ブ コ マ ン ド で な い 。

EPERM

addr が プ ロ セ ス の ア ド レ ス 空 間 の 外 に あ る 。

ENODEV

ARCH_SET_CPUID was requested, but the underlying hardware does not support CPUID faulting.

準 拠

arch_prctl () は Linux/x86-64 拡 張 で あ り 、 移 植 性 を 意 図 し た プ ロ グ ラ ム で は 使 う べ き で な い 。

注 意

arch_prctl () は 現 在 の と こ ろ Linux/x86-64 上 の 64 ビ ッ ト プ ロ グ ラ ム で の み サ ポ ー ト さ れ て い る 。

新 し い 32 ビ ッ ト セ グ メ ン ト セ レ ク タ が ロ ー ド さ れ た 場 合 、 64 ビ ッ ト ベ ー ス は 変 更 さ れ る 。

ARCH_SET_GS が 無 効 に さ れ て い る カ ー ネ ル も あ る 。

Context switches for 64-bit segment bases are rather expensive. As an optimization, if a 32-bit TLS base address is used, arch_prctl () may use a real TLS entry as if set_thread_area (2) had been called, instead of manipulating the segment base register directly. Memory in the first 2 GB of address space can be allocated by using mmap (2) with the MAP_32BIT flag.

Because of the aforementioned optimization, using arch_prctl () and set_thread_area (2) in the same thread is dangerous, as they may overwrite each other’s TLS entries.

バ ー ジ ョ ン 2.7 時 点 で は 、 glibc に は arch_prctl () の プ ロ ト タ イ プ が な い 。 今 の と こ ろ ユ ー ザ ー は 自 分 自 身 で 宣 言 す る 必 要 が あ る 。 こ れ は 将 来 の glibc の バ ー ジ ョ ン で 修 正 さ れ る か も し れ な い 。

FS may be already used by the threading library. Programs that use ARCH_SET_FS directly are very likely to crash.

関 連 項 目

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

AMD X86-64 Programmer’s manual

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。