Вызов функции C с другим указателем стека (gcc)

Я ищу способ вызвать функцию C в другом стеке, т.е. сохранить текущий указатель стека, установить указатель стека в другое место, вызвать функцию и восстановить старый указатель стека, когда он вернется.

Целью этого является облегченная система потоков для языка программирования. Потоки будут работать с очень маленькими стеками, проверять, когда требуется больше стека, и динамически изменять его размер. Это сделано для того, чтобы можно было выделить тысячи потоков, не тратя много памяти. При вызове кода C небезопасно использовать крошечный стек, так как код C не знает о проверке и изменении размера, поэтому я хочу использовать большой стек pthread, который используется только для вызова C (, разделяемого между облегченными потоки в одном pthread ).

Теперь я мог писать заглушки ассемблерного кода, которые будут работать нормально, но мне было интересно, есть ли лучший способ сделать это, например, расширение gcc или библиотека, которая уже реализует это. Если нет, то я думаю, что спрячу голову в руководствах по ABI и ассемблеру; -)Я спрашиваю это только из лени и не желая изобретать велосипед.

8
задан Luke McCarthy 20 June 2012 в 01:32
поделиться