Durante l'esecuzione di un programma che ho scritto in assembly, ottengo l'errore Illegal instruction
. C'è un modo per sapere quale istruzione sta causando l'errore, senza eseguire il debug, perché la macchina su cui sto lavorando non ha un debugger o un sistema di sviluppo. In altre parole, compilo in una macchina e corro su un'altra. Non riesco a testare il mio programma sulla macchina che sto compilando perché non supportano SSE4.2. Il computer su cui sto eseguendo il programma supporta comunque le istruzioni SSE4.2.Trova quale istruzione di montaggio ha causato un errore di istruzione non valida senza debug
Penso che forse perché ho bisogno di dire all'assemblatore (YASM) di riconoscere le istruzioni SSE4.2, proprio come facciamo con gcc passando il flag -msse4.2
. O pensi che non sia la ragione? Qualche idea su come dire a YASM di riconoscere le istruzioni SSE4.2?
Forse dovrei intrappolare il segnale SIGILL e quindi decodificare SA_SIGINFO per vedere che tipo di operazione illegale fa il programma.
YASM riconosce le istruzioni SSE4.2, quindi non è questo il problema. Sei sicuro che la tua macchina supporti SSE4.2? Che hardware è esattamente? È possibile eseguire il programma in un emulatore, valgrind (che supporta il sottoinsieme di SSE4.2 utilizzato in glibc e gcc) probabilmente funzionerebbe. – hirschhornsalz