別のスタックでC関数を呼び出す方法を探しています。つまり、現在のスタックポインターを保存し、スタックポインターを別の場所に設定し、関数を呼び出して、戻ってきたときに古いスタックポインターを復元します。
これの目的は、プログラミング言語用の軽量スレッドシステムです。スレッドは非常に小さなスタックで動作し、さらにスタックが必要になるタイミングを確認して、動的にサイズを変更します。これは、多くのメモリを無駄にすることなく、何千ものスレッドを割り当てることができるようにするためです。Cコードを呼び出すときは、小さなスタックを使用するのは安全ではありません。Cコードはチェックとサイズ変更を認識していないため、Cの呼び出しにのみ使用される大きなpthreadスタックを使用したいと思います(同じpthread)。
これで、正常に動作するアセンブリコードスタブを作成できましたが、gcc拡張機能や、すでに実装されているライブラリなど、これを行うためのより良い方法があるかどうか疑問に思いました。そうでなければ、私は頭をABIとアセンブリ言語のマニュアルに埋め込んでしまうと思います;-)私は怠惰からこれを尋ねるだけで、車輪の再発明をしたくありません。