Al ejecutar un programa que he escrito en ensamblado, recibo el error Illegal instruction
. ¿Hay alguna manera de saber qué instrucción está causando el error, sin depuración, porque la máquina en la que estoy ejecutando no tiene un depurador ni ningún sistema de desarrollo? En otras palabras, compilo en una máquina y corro en otra. No puedo probar mi programa en la máquina que estoy compilando porque no son compatibles con SSE4.2. La máquina en la que ejecuto el programa sí admite las instrucciones de SSE4.2.Buscar qué instrucción de ensamblado provocó un error de instrucción ilegal sin depurar
Creo que tal vez porque necesito decirle al ensamblador (YASM) que reconozca las instrucciones SSE4.2, al igual que hacemos con gcc pasándole la bandera -msse4.2
. ¿O crees que no es la razón? ¿Alguna idea de cómo decirle a YASM que reconozca las instrucciones de SSE4.2?
Quizás debería atrapar la señal SIGILL y luego decodificar el SA_SIGINFO para ver qué tipo de operación ilegal hace el programa.
YASM reconoce las instrucciones SSE4.2, por lo que este no es el problema. ¿Estás seguro de que tu máquina es compatible con SSE4.2? ¿Qué hardware es exactamente? Podrías ejecutar el programa en un emulador, valgrind (que admite el subconjunto de SSE4.2 que se usa en glibc y gcc) probablemente funcionaría. – hirschhornsalz