Sto cercando un modo per chiamare una funzione C in un altro stack, ovvero salvare il puntatore stack corrente, impostare il puntatore dello stack su una posizione diversa, chiamare la funzione e ripristina il vecchio puntatore dello stack quando ritorna.Chiamare la funzione C con un altro stack pointer (gcc)
Lo scopo di questo è un sistema di threading leggero per un linguaggio di programmazione. I thread funzioneranno su stack molto piccoli, controllare quando è necessario più stack e ridimensionarli dinamicamente. Questo è così che migliaia di thread possono essere allocati senza sprecare molta memoria. Quando si chiama in codice C non è sicuro usare un piccolo stack, poiché il codice C non sa di controllo e ridimensionamento, quindi voglio usare un grosso stack pthread che viene usato solo per chiamare C (condiviso tra thread leggeri su lo stesso pthread).
Ora potrei scrivere stub di codice assembly che funzioneranno bene, ma mi chiedevo se c'è un modo migliore per farlo, come un'estensione gcc o una libreria che già la implementa. Se no, allora immagino che avrò la mia testa nascosta in ABI e manuali di linguaggio assembly ;-) Lo chiedo solo per pigrizia e non volendo reinventare la ruota.
È possibile implementare i propri "thread" con stack individualizzati utilizzando il clone syscall. Se si utilizza la chiamata di sistema diretta anziché il wrapper libc, funziona in modo simile a fork, tranne che è possibile specificare quali risorse e spazi dei nomi sono condivisi. – technosaurus