Pregunta

Estoy tratando de recopilar Rubí 1.9.1-p0 en HP-UX. Después de un pequeño cambio en ext / pty.c se compila correctamente, aunque con un mucho de los mensajes de advertencia (alrededor de 5 km). Cuando ejecuto las pruebas automáticas usando "make test" se bloquea y machos vuelca con el siguiente error:

  

sendsig: useracc falló. 0x9fffffffbf7dae00 0x00000000005000

     

PID 3044 murió debido a un fallo por escrito el contexto de señal -. Posible desbordamiento de pila

     

instrucción ilegal

A partir de este problema buscando en Google la instrucción ilegal es sólo una señal de que el sistema utiliza para matar el proceso, y no está relacionado con el problema. Parecería que hay un problema con la re-establecimiento del contexto cuando se llama al manejador de señales. Con lo que el núcleo en GDB no muestra una pila particularmente profunda, así que no creo que el "posible desbordamiento de pila" es correcto tampoco.

La salida GDB pila traza se ve así:

#0  0xc00000000033a990:0 in __ksleep+0x30 () from /usr/lib/hpux64/libc.so.1
#1  0xc0000000001280a0:0 in __mxn_sleep+0xae0 ()
    from /usr/lib/hpux64/libpthread.so.1
#2  0xc0000000000c0f90:0 in <unknown_procedure> + 0xc50 ()
    from /usr/lib/hpux64/libpthread.so.1
#3  0xc0000000000c1e30:0 in pthread_cond_timedwait+0x1d0 ()
    from /usr/lib/hpux64/libpthread.so.1
¿Fue útil?

Solución

contestar a mi propia pregunta:

El problema era que la pila está asignando era demasiado pequeño. Por lo que realmente era un desbordamiento de pila. La función sendsig () estaba preparando una estructura de marco que va a copiar desde el espacio kernel al espacio de usuario. La función useracc () comprueba que hay suficiente espacio en la dirección especificada para hacerlo.

El código 1.9.1-p0 Rubí estaba usando PTHREAD_STACK_MIN para asignar la pila por cualquier hilos creados. De acuerdo con la documentación de HP-UX, en Itanium esto es 256KB, pero cuando me registré los archivos de cabecera, fue sólo de 4 KB. El mensaje de error de useracc () indicó que estaba tratando de copiar 20KB.

Así que si un hilo recibe una señal, no tendría espacio suficiente para recibir el contexto de la señal en su pila.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top