Man page - rt_sigreturn(2)

Packages contains this manual

Available languages:

en fr nl ja ru ro de

Manual

SIGRETURN

名 前
書 式
説 明
返 り 値
準 拠
注 意
C ラ イ ブ ラ リ と カ ー ネ ル の 違 い
関 連 項 目
こ の 文 書 に つ い て

名 前

sigreturn, rt_sigreturn - シ グ ナ ル ハ ン ド ラ ー か ら 返 り 、 ス タ ッ ク を 掃 除 す る

書 式

int sigreturn(...);

説 明

Linux カ ー ネ ル が プ ロ セ ス に 対 し て ブ ロ ッ ク さ れ て い な い シ グ ナ ル が 処 理 待 ち と 判 定 し た 場 合 、 そ の プ ロ セ ス の 次 回 の ユ ー ザ ー モ ー ド へ の 遷 移 (す な わ ち 、 シ ス テ ム コ ー ル か ら の リ タ ー ン 時 や そ の プ ロ セ ス が CPU に 再 ス ケ ジ ュ ー ル さ れ る 際 )、 カ ー ネ ル は ユ ー ザ ー 空 間 ス タ ッ ク の 新 し い フ レ ー ム を 作 成 し 、 そ こ に プ ロ セ ス コ ン テ キ ス ト の 種 々 の 値 (プ ロ セ ッ サ ー の ス テ ー タ ス ワ ー ド 、 レ ジ ス タ ー 、 シ グ ナ ル マ ス ク 、 シ グ ナ ル ス タ ッ ク 設 定 ) を 保 存 す る 。

ま た 、 カ ー ネ ル は 、 ユ ー ザ ー モ ー ド へ の 遷 移 時 に シ グ ナ ル ハ ン ド ラ ー が 呼 び 出 さ れ 、 ハ ン ド ラ ー か ら の リ タ ー ン 時 に 、 制 御 が "signal trampoline" と 呼 ば れ る ユ ー ザ ー 空 間 コ ー ド ブ ロ ッ ク に 渡 さ れ る よ う に 、 準 備 を 行 う 。 signal trampoline の コ ー ド が sigreturn () を 呼 び 出 す 。

sigreturn () は 、 シ グ ナ ル ハ ン ド ラ ー を 起 動 す る た め に 行 っ た こ と の 全 て — プ ロ セ ス の シ グ ナ ル マ ス ク の 変 更 、 シ グ ナ ル ス タ ッ ク の 切 り 替 え ( sigaltstack (2) 参 照 ) — の 取 り 消 し を 行 う 。 以 前 に ユ ー ザ ー 空 間 ス タ ッ ク に 保 存 さ れ た 情 報 を 使 っ て 、 sigreturn () は プ ロ セ ス の シ グ ナ ル マ ス ク の 復 元 、 ス タ ッ ク の 切 り 替 え 、 プ ロ セ ス の コ ン テ キ ス ト (プ ロ セ ッ サ フ ラ グ 、 レ ジ ス タ ー (ス タ ッ ク ポ イ ン タ ー 、 命 令 ポ イ ン タ ー を 含 む )) の 復 元 を 行 い 、 プ ロ セ ス が シ グ ナ ル に よ り 割 り 込 ま れ た 場 所 か ら 実 行 を 再 開 で き る よ う に す る 。

返 り 値

sigreturn () が 返 る こ と は な い 。

準 拠

多 く の UNIX 系 の シ ス テ ム に は sigreturn () シ ス テ ム コ ー ル か 似 た よ う な シ ス テ ム コ ー ル が あ る 。 し か し な が ら 、 こ の シ ス テ ム コ ー ル は POSIX に は 規 定 さ れ て お ら ず 、 そ の 動 作 の 詳 細 は シ ス テ ム に よ り 異 な る 。

注 意

sigreturn () exists only to allow the implementation of signal handlers. It should never be called directly. (Indeed, a simple sigreturn () wrapper in the GNU C library simply returns -1, with errno set to ENOSYS .) Details of the arguments (if any) passed to sigreturn () vary depending on the architecture. (On some architectures, such as x86-64, sigreturn () takes no arguments, since all of the information that it requires is available in the stack frame that was previously created by the kernel on the user-space stack.)

か つ て 、 UNIX シ ス テ ム で は signal trampoline コ ー ド が ユ ー ザ ー ス タ ッ ク に 置 か れ て い た 。 今 日 で は 、 ユ ー ザ ー ス タ ッ ク の ペ ー ジ は 保 護 さ れ 、 コ ー ド の 実 行 は 禁 止 さ れ て い る 。 し た が っ て 、 現 代 の Linux シ ス テ ム で は 、 ア ー キ テ ク チ ャ ー 依 存 で は あ る が 、 signal trampoline コ ー ド は vdso (7) 内 も し く は C ラ イ ブ ラ リ 内 に 置 か れ る 。 後 者 の 場 合 、 C ラ イ ブ ラ リ の sigaction (2) の ラ ッ パ ー 関 数 は 、 trampoline code の 場 所 を そ の ア ド レ ス を sigaction (2) 構 造 体 の sa_restorer フ ィ ー ル ド に 設 定 し て カ ー ネ ル に 伝 え 、 sa_flags フ ィ ー ル ド の SA_RESTORER フ ラ グ を セ ッ ト す る 。

保 存 さ れ た プ ロ セ ス コ ン テ キ ス ト 情 報 は ucontext_t 構 造 体 に 置 か れ る ( <sys/ucontext.h> 参 照 )。 こ の 構 造 体 は 、 sigaction (2) の SA_SIGINFO フ ラ グ で 設 定 さ れ た シ グ ナ ル ハ ン ド ラ ー の 第 3 引 数 と し て シ ン グ ル ハ ン ド ラ ー 内 で 参 照 で き る 。

他 の い く つ か の UNIX シ ス テ ム で は 、 signal trampoline の 扱 い は 少 し 異 な る 。 特 に 、 い く つ か の シ ス テ ム で は 、 ユ ー ザ ー モ ー ド に 戻 る 際 に 、 カ ー ネ ル は 制 御 を (シ グ ナ ル ハ ン ド ラ ー で は な く ) trampoline に 渡 し 、 trampoline コ ー ド が シ グ ナ ル ハ ン ド ラ ー を 呼 び 出 す (そ の 後 ハ ン ド ラ ー が 返 る と sigreturn () を 呼 び 出 す )。

C ラ イ ブ ラ リ と カ ー ネ ル の 違 い

The original Linux system call was named sigreturn (). However, with the addition of real-time signals in Linux 2.2, a new system call, rt_sigreturn () was added to support an enlarged sigset_t type. The GNU C library hides these details from us, transparently employing rt_sigreturn () when the kernel provides it.

関 連 項 目

kill (2), restart_syscall (2), sigaltstack (2), signal (2), getcontext (3), signal (7), vdso (7)

こ の 文 書 に つ い て

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