Estoy buscando una manera de llamar a una función C en una pila diferente, es decir, guardar el puntero de pila actual, establecer el puntero de pila en una ubicación diferente, llamar a la función y restablece el antiguo puntero de pila cuando vuelve.Función de llamada C con diferente puntero de pila (gcc)
El propósito de esto es un sistema de enhebrado liviano para un lenguaje de programación. Los subprocesos operarán en pilas muy pequeñas, verificará cuándo se necesita más pila y cambiará el tamaño dinámicamente. Esto es para que se puedan asignar miles de subprocesos sin desperdiciar mucha memoria. Cuando se llama al código C no es seguro usar una pila pequeña, ya que el código C no sabe cómo controlar y redimensionar, así que quiero usar una gran pila de subprocesos que se usa solo para llamar a C (compartida entre subprocesos ligeros en el mismo pthread).
Ahora podría escribir stubs de código ensamblador que funcionarán bien, pero me preguntaba si hay una mejor manera de hacerlo, como una extensión gcc o una biblioteca que ya lo implemente. Si no, entonces supongo que tendré mi cabeza enterrada en ABI y en los manuales del lenguaje ensamblador ;-) Solo pregunto esto por pereza y por no querer reinventar la rueda.
Puede implementar sus propios "hilos" con pilas individualizadas utilizando el clon de syscall. Si utiliza la llamada directa al sistema en lugar de la envoltura de libc, funciona de manera muy parecida a fork excepto que puede especificar qué recursos y espacios de nombres se comparten. – technosaurus