Manpages

名 前

arch_prctl − ア ー キ テ ク チ ャ ー 固 有 の ス レ ッ ド 状 態 を 設 定 す る

書 式

#include <asm/prctl.h>
#include <sys/prctl.h>

int arch_prctl(int code, unsigned long *addr);

説 明

arch_prctl() 関 数 は ア ー キ テ ク チ ャ ー 固 有 の プ ロ セ ス 状 態 ま た は ス レ ッ ド 状 態 を 設 定 す る 。 code は 副 機 能 を 選 択 し 、 引 き 数 addr を 副 機 能 に 渡 す 。 addr は 、 "set" 操 作 で は unsigned long と し て 、 "get" 操 作 で は unsigned long * と し て 解 釈 さ れ る 。

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 が プ ロ セ ス の ア ド レ ス 空 間 の 外 に あ る 。

準 拠

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

注 意

arch_prctl() は 現 在 の と こ ろ Linux/x86−64 上 の 64 ビ ッ ト プ ロ グ ラ ム で の み サ ポ ー ト さ れ て い る 。 新 し い 32 ビ ッ ト セ グ メ ン ト セ レ ク タ が ロ ー ド さ れ た 場 合 、 64 ビ ッ ト ベ ー ス は 変 更 さ れ る 。

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

64 ビ ッ ト セ グ メ ン ト ベ ー ス の コ ン テ キ ス ト ス イ ッ チ は 、 や や 高 価 で あ る 。 LDT を modify_ldt(2) で 設 定 し て セ グ メ ン ト セ レ ク タ を 使 う か 、 (カ ー ネ ル 2.5 以 降 の ) set_thread_area(2) シ ス テ ム コ ー ル を 使 う こ と に よ り 、 32 ビ ッ ト ベ ー ス を 設 定 す る と い う 高 速 な 代 替 手 段 も あ る 。 4GB よ り 大 き な ベ ー ス を 設 定 し た い 場 合 に の み 、 arch_prctl() が 必 要 で あ る 。 ア ド レ ス 空 間 の 最 初 の 2GB に あ る メ モ リ ー は 、 mmap(2)MAP_32BIT フ ラ グ を 指 定 し て 割 り 当 て る こ と が で き る 。 バ ー ジ ョ ン 2.7 時 点 で は 、 glibc に は arch_prctl() の プ ロ ト タ イ プ が な い 。 今 の と こ ろ ユ ー ザ ー は 自 分 自 身 で 宣 言 す る 必 要 が あ る 。 こ れ は 将 来 の glibc の バ ー ジ ョ ン で 修 正 さ れ る か も し れ な い 。

FS は ス レ ッ ド ラ イ ブ ラ リ で 既 に 使 わ れ て い る か も し れ な い 。

関 連 項 目

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

AMD X86−64 Programmer’s manual

こ の 文 書 に つ い て

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