Вопрос

Я получаю странную ошибку с 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, чтобы я мог продолжать проверять мою программу?

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top