Компилираме 32-битово приложение, което се свързва със статична компилация на cryptopp
.
gcc: 4.4.7
CPU: Intel Xeon E5-2680
ОС: CentoOS 6.5
Crypto++ : 5.6.2
Нашата програма се компилира и работи добре на тази машина. Когато се опитваме да бягаме
CPU: Intel Xeon X5690
ОС: CentoOS 6.5
gcc: 4.4.6
Получаваме грешка при сегментиране в cryptopp -> rijndael.cpp -> Rijndael::Base::UncheckedSetKey() извикване на _mm_loadu_si128()
Ако изградим cryptopp с CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE, зададен на 0, всичко работи добре. Изглежда, че AES-NI трябва да е наличен на този сървър и извикването на cryptopp към HasAESNI() връща true.
Някакви идеи какво може да причинява това или как да проследим по-нататък?
_mm_loadu_si128
еMOVDQU
. Вярвам, че това е инструкция SSE2. Компилирахте ли Crypto++ и вашата програма на машината Intel Xeon X5690 (или я копирахте от друга машина)? Микрокодът актуален ли е на Intel Xeon X5690 (вярвам, че инструкцията се емулира с микрокод)? - person jww   schedule 25.03.2014