Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为Valgrind会话设置LD_HWCAP_掩码_C++_Linux_Linker_Valgrind_Stdstring - Fatal编程技术网

C++ 为Valgrind会话设置LD_HWCAP_掩码

C++ 为Valgrind会话设置LD_HWCAP_掩码,c++,linux,linker,valgrind,stdstring,C++,Linux,Linker,Valgrind,Stdstring,在std::string比较期间,我在Valgrind下捕获到一个未初始化的读取。该程序是在没有-march和-m的情况下构建的,因此我们采用的是仅限SSE2的core-x86_64配置。我们还希望将运行时库限制为SSE2 文档LD\u HWCAP\u MASK,但未提供有关创建MASK的信息。事实上,描述是讨论“面具”的唯一地方 这里有一个类似的问题,但我不太明白发生了什么。我无法想象一个人需要创建源代码补丁,然后重新编译运行库和加载程序来创建硬件掩码。(但我可能遗漏了一些明显的东西) 如何为

std::string
比较期间,我在Valgrind下捕获到一个未初始化的读取。该程序是在没有
-march
-m
的情况下构建的,因此我们采用的是仅限SSE2的core-x86_64配置。我们还希望将运行时库限制为SSE2

文档
LD\u HWCAP\u MASK
,但未提供有关创建MASK的信息。事实上,描述是讨论“面具”的唯一地方

这里有一个类似的问题,但我不太明白发生了什么。我无法想象一个人需要创建源代码补丁,然后重新编译运行库和加载程序来创建硬件掩码。(但我可能遗漏了一些明显的东西)

如何为x86_64创建仅限SSE2的掩码


以下是调查结果的主要部分:

==4536== Conditional jump or move depends on uninitialised value(s)
==4536==    at 0x4C34C26: __memcmp_sse4_1 (vg_replace_strmem.c:1099)
==4536==    by 0x48B3B5: compare (char_traits.h:310)
==4536==    by 0x48B3B5: __gnu_cxx::__enable_if<std::__is_char<char>::__value, bool>::__type std::operator==<char>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (basic_string.h:6006)
==4536==    by 0x4F8E9C: operator!=<char, std::char_traits<char>, std::allocator<char> > (basic_string.h:6045)
...
这是Valgrind生成的唯一发现。这是酷刑测试的一部分,字符串长度为128KB

当我通过C7-D在2000年初的32位上仅使用SSE和SSE2执行相同的测试时,问题并没有出现<代码>\u memcmp\u sse4\u 1引起了很多怀疑

在Asan、Bsan、UBsan、Coverity和Microsoft的企业分析下,代码也很干净。Valgrind试验是唯一一个得出结论的试验


这是系统信息

  • 操作系统:Fedora 26,x86_64,完全修补
  • Valgrind:Valgrind-3.14.0.GIT(从源代码构建)
  • Glibc:
    ldd(GNU libc)2.25
  • 编译器:GCC4.8-GCC7.2
  • 编译器选项:
    -DNDEBUG-g3-O1-DCRYPTOPP\u VALGRIND

-DCRYPTOPP_VALGRIND
没有发生任何特殊情况。在进行此类测试时,我们将启用更多测试。

您使用的valgrind和glibc版本是什么?@EmployedRussian-Valgirnd是valgrind-3.14-Git,glibc是2.25。
==4536== Conditional jump or move depends on uninitialised value(s)
==4536==    at 0x4C34C26: __memcmp_sse4_1 (vg_replace_strmem.c:1099)
==4536==    by 0x48B3B5: compare (char_traits.h:310)
==4536==    by 0x48B3B5: __gnu_cxx::__enable_if<std::__is_char<char>::__value, bool>::__type std::operator==<char>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (basic_string.h:6006)
==4536==    by 0x4F8E9C: operator!=<char, std::char_traits<char>, std::allocator<char> > (basic_string.h:6045)
...
if (test == "EncryptXorDigest" && xorDigest != ciphertextXorDigest)
{
     ...
}