Мы компилируем 32-битное приложение, которое связывается со статической сборкой cryptopp
.
gcc: 4.4.7
ЦП: Intel Xeon E5-2680
ОС: CentoOS 6.5
Crypto++ : 5.6.2
Наша программа компилируется и отлично работает на этой машине. Когда мы пытаемся бежать дальше
ЦП: 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