Как подавить предупреждения valgrind по происхождению неинициализированных значений?

Valgrind расскажет вам о происхождении неинициализированных значений с опцией track-origins=yes.

Я пытался подавить эти предупреждения, но проблема в том, что данные, основанные на неинициализированных значениях, могут распространяться повсюду, вызывая предупреждения в другом месте.

Решение будет подавлять происхождение неинициализированных данных. Как мне это сделать? Является ли это возможным? Кажется, что подавление файлов фильтрует только трассировку стека.

Причина, по которой я хочу, что OpenSSL повышает случайность с помощью неинициализированных значений с целью, и я хочу проверить сборку релиза с valgrind (поэтому -DPURIFY не является вариантом).

Ответ 1

Мое первоначальное чтение вашего вопроса состоит в том, что вы можете быть в порядке с отключением всех неинициализированных ошибок значений, и в этом случае --undef-value-errors=no будет делать трюк.

Если вы ищете что-то по частям, некоторые поспешные тесты, похоже, указывают на использование --gen-suppressions=yes, а затем отвечая на y для соответствующих выходов и отбрасывая их в файл подавления, который работал для меня, когда вы играли с моим двоичным файлом openssl.

Кроме того, вы можете найти ответ на вопрос: Как вы сообщаете Valgrind о полном подавлении какого-либо файла.so? полезно.

Ответ 2

Решение будет подавлять происхождение неинициализированных данных. Как мне это сделать? Является ли это возможным? Кажется, что подавление файлов фильтрует только трассировку стека.

У меня была такая же проблема с OpenSSL. По словам Тома Хьюза в списке рассылки Valgrind, это невозможно. См. Шаблон подстановки уровня кадра, не соответствующий правилу подавления? ,

В моем случае я пытался использовать подстановочные знаки уровня кадра для подавления результатов в памяти, затронутых RAND_init_fips (версия проблемы OpenSSL FIPS). Это не работает, хотя мы хотели бы, чтобы он работал:

{
   RAND_init_fips_1
   Memcheck:Cond
   ...
   fun:RAND_init_fips
   ...
}

{
   RAND_init_fips_2
   Memcheck:Value8
   ...
   fun:RAND_init_fips
   ...
}

{
   RAND_init_fips_3
   Memcheck:Value4
   ...
   fun:RAND_init_fips
   ...
}

Ответ 3

Попробуйте добавить это в файл поддержки.

{
   cond
   Memcheck:Cond
   ...
   fun:*
   ...
}
{
   value8
   Memcheck:Value8
   ...
   fun:*
   ...
}

{
   value4
   Memcheck:Value4
   ...
   fun:*
   ...
}

Например, если ваш исполняемый файл - a.out, создайте файл ./val.supp с содержимым и запустите valgrind --suppressions=./val.supp ./a.out.