停止Clang优化-O0处的变量?

时间:2016-12-02 18:41:21

标签: debugging optimization clang++

我们正在Clang的边缘测试案件中遇到崩溃。边缘案例手动启用所有X86 cpu功能,因为Clang并不总是使用-march=native启用它们。案件还包括地址清理工具:

$ CXX=clang++ make CXXFLAGS="-DDEBUG -g3 -O0 -std=c++03 -msse2 -msse3 -mssse3 -msse4.1 -msse4.2
-maes -mpclmul -mrdrnd -mrdseed -mavx -mavx2 -mbmi -mbmi2 -madx -march=native -fPIC -pipe
-fsanitize=address -fno-omit-frame-pointer"
make: Nothing to be done for `all'.

稍后,当我们在GDB下运行程序时,缺少变量和值:

$ gdb cryptest.exe
...
(gdb) r v
...
Testing RDRAND generator...

Program received signal SIGSEGV, Segmentation fault.
0x0000000001db20b4 in CryptoPP::GCC_RRA_GenerateBlock (output=<optimized out>, 
    size=<optimized out>, safety=<optimized out>) at rdrand.cpp:235
235         __asm__ volatile(

我们如何阻止Clang优化-O0的变量?

我们已经多次重建了库和测试程序,以确保不会意外使用优化的东西。

$ clang --version
Ubuntu clang version 3.6.0-2ubuntu1~trusty1 (tags/RELEASE_360/final) (based on LLVM 3.6.0)

0 个答案:

没有答案