GCCについて part2
■ このスレッドは過去ログ倉庫に格納されています
0028デフォルトの名無しさん
NGNG以下の例はプログラムカウンタ、スタックポインタ、スタックフレームを差し替えています。
コンパイラすら通していないので、動作保証はありません。
jmp_bufの型定義は環境に依存するので、インラインアセンブラを使うのと大差ないかも知れません。
void create_new_task(void *stkbuf, size_t stksize)
{
jmp_buf env;
if(setjmp(env) == 0)
{
/* 新しい実行環境を作成する */
env[0].__jmpbuf[5] = (int)task_startup; /* プログラムカウンタ */
env[0].__jmpbuf[4] = (size_t)stkbuf + stksize; /* スタックポインタ */
env[0].__jmpbuf[3] = (int)NULL; /* スタックフレームポインタ */
/* 新しい実行環境へジャンプ */
longjmp(env, 1);
}
/* この行は実行されない */
assert(0);
}
■ このスレッドは過去ログ倉庫に格納されています