Pregunta

Estoy buscando información relacionada con la aplicación de determinadas extensiones de CPU en un módulo del núcleo. He encontrado algo relacionado: http: / /www.mirrors.docunext.com/lxr/http/source/arch/mips/kernel/unaligned.c , de hecho, es el único código fuente que puedo encontrar que está ni siquiera cerca.

Básicamente, tengo un binario único objeto compartido construido con ciertas extensiones de la CPU, lo que se necesita para ejecutar en una CPU un poco mayor que tiene la mayor parte del conjunto de instrucciones, pero no la fantasía cosas nuevas. Sí, sé que va a ser bastante lento, pero es mejor que chocar con SIGILLs.

¿Fue útil?

Solución 4

Bueno, después de leer el código fuente del núcleo, parece que ya hay un soporte secundario para esto. Realmente no puedo ver cuánto se usa en realidad, pero no existe una lista enlazada para almacenar las diversas instrucciones emulado. Si soy capaz de conseguir realmente esta pasando, probablemente voy a cambiar al árbol suministrado kernel-header.

Si estoy módulos del kernel correcto entendimiento, no se ve como no sería un problema para apoyar la emulación enchufable.

Otros consejos

creo que se puede hacer esto en espacio de usuario. Instalar un controlador para SIGILL con sigaction() y especificar SA_SIGINFO. El si_code campo en el siginfo_t permite distinguir entre varias causas de SIGILL. Por ejemplo, tratando de emular una instrucción cuando la señal provenía de kill() no tiene sentido. El tercer argumento de los puntos de controlador a una estructura que contiene el contexto de la CPU en el momento del fallo (ver documentación). Es probable que pueda modificar esto y volver desde el manejador de señales, los cambios entren en vigencia; Si eso no funciona, intente setcontext().

Obviamente, será un poco menos eficiente que hacerlo en el kernel, pero más limpio y más seguro.

Se puede hacer esto, pero es un poco doloroso. Los códigos de operación no válidos deben ser interceptados, así que o bien necesidad de modificar el controlador de instrucción ilegal existente, o envuelva el controlador, que es sucio y complicado.

Si se quiere evitar grandes modificaciones del kernel, pero hacer como un núcleo puro, el enfoque de excepción ajustada es probablemente la única manera de hacerlo. Si se puede modificar el núcleo, el controlador de parcheado es mejor.

No creo que se puede solucionar este problema usando un módulo del núcleo. Creo que tú tampoco necesidad de ejecutar esto en una máquina virtual que permite que las instrucciones que faltan (que se lo trate de usar XEN) o recompilar el objeto de modo que no los usa.

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