Cでは、関数が返されない場合、スレッドの実行スタックはどうなりますか?
void funcB() __attribute__ ((noreturn));
int funcA (...)
{
// do stuff
funcB();
// do more stuff
}
この状況の例は、たとえば、funcAは新しいスレッドを作成するカーネル関数であり、funcBは新しいスレッドをユーザーモードに切り替えて実行させるカーネルコードです。
ありがとうございました。
Cでは、関数が返されない場合、スレッドの実行スタックはどうなりますか?
void funcB() __attribute__ ((noreturn));
int funcA (...)
{
// do stuff
funcB();
// do more stuff
}
この状況の例は、たとえば、funcAは新しいスレッドを作成するカーネル関数であり、funcBは新しいスレッドをユーザーモードに切り替えて実行させるカーネルコードです。
ありがとうございました。
これを見たことがありますか?http://gcc.gnu.org/onlinedocs/gcc-4.3.2//gcc/Function-Attributes.html
についてのセクションで述べているようにnoreturn
:
noreturn 関数を呼び出す前に、呼び出し関数によって保存されたレジスタが復元されると想定しないでください。
これは、たとえば、noreturn
関数の終了後にスタック ポインター (または他のスタック フレーム要素) が復元されるという保証がないことを意味すると思います。