valgrind: прерывание теста crypto++ zlib

Я получаю странную ошибку с valgrind в программе, которая использует функции Crypto++ zlib:

vex x86->IR: unhandled instruction bytes: 0xC5 0xF9 0x6E 0x45
==8605== valgrind: Unrecognised instruction at address 0x814c88b.
==8605==    at 0x814C88B: CryptoPP::ByteQueue::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long long&, std::string const&, bool) (misc.h:189)
==8605==    by 0x814C3E6: CryptoPP::ByteQueue::Get(unsigned char*, unsigned int) (cryptlib.h:901)
==8605==    by 0x815DAAE: CryptoPP::ZlibDecompressor::ProcessPoststreamTail() (zlib.cpp:84)
==8605==    by 0x815B6EC: CryptoPP::Inflator::ProcessInput(bool) (zinflate.cpp:349)
==8605==    by 0x815BC25: CryptoPP::Inflator::Put2(unsigned char const*, unsigned int, int, bool) (zinflate.cpp:295)
==8605==    by 0x805E40C: CryptoPP::BufferedTransformation::Put(unsigned char const*, unsigned int, bool) (cryptlib.h:789)

Я знаю, что Crypto++ использует некоторую ручную сборку в определенных областях, чтобы ускорить работу, и я читал, что инструкции, начинающиеся с 0xC5, никогда не присутствуют в скомпилированном коде. Может ли это быть связано с инструкцией по сборке из куска закодированной вручную сборки? И если да, то могу ли я отключить эту проверку с помощью valgrind, чтобы я мог продолжать тестировать свою программу?


person Ben    schedule 25.01.2012    source источник


Ответы (1)


Это инструкция AVX. В настоящее время Valgrind не поддерживает инструкции AVX, но поддержка AVX находится в стадии разработки. Поскольку valgrind работает путем эмуляции каждой инструкции, это не просто проверка, которую вы можете обойти, если только вы не хотите, чтобы она сразу переходила к фактической инструкции, что полностью отключило бы valgrind на оставшуюся часть выполнения.

person mark4o    schedule 26.01.2012
comment
Благодарю за разъяснение. Я избежал этого, используя другую библиотеку. - person Ben; 26.01.2012