首页 > 解决方案 > -flto 使用 gcc 5.1.0 标记段错误

问题描述

我在 Windows 上使用 gcc 5.1.0。

调用 memset 时,我收到一个 SEGFAULT,当启用 -flto 标志(链接时间优化)时不会发生这种情况。

/*#### function.h ####*/
void secure_bzero (void *s,size_t size);

/*##### function.c ####*/
/* Securely erase size bytes from s */
void WEAK __attribute__((noinline)) secure_bzero (void *s,size_t size) { 
     memset(s,0,size);
}

当我想在 CodeBlocks 中调试我的应用程序时,我注意到了分段错误。我启用了调试符号标志 (-g) 并收到警告,将 -flto 与 -g 结合使用“目前处于试验阶段,预计会产生错误的结果”。

我不明白这里是如何产生分段错误的。

感谢尤金·什。提示发布一个完整的例子:

#include "function.h"
int main(){
    unsigned char seed[32];
    for (int i=0; i<32; i++){
        seed[i] = i;
    }
    secure_bzero(seed,sizeof(seed));
    return 1;
}

标签: cgccsegmentation-faultmemset

解决方案


推荐阅读