rt-thread icon indicating copy to clipboard operation
rt-thread copied to clipboard

aarch64-gcc编译,rt_memset等函数编译问题

Open FragrantRye opened this issue 2 years ago • 1 comments

在kservice.c中,提供了rt_memset等标准库函数的等价实现,很方便移植到无libc的平台上。但是gcc似乎并不领情: 在rt_memset末尾有一段针对非对齐地址的逐字节拷贝:

while (count--)
{
    *m++ = (char)d;
}

用gcc -O2编译这段代码时,生成了这样的汇编: y8wGRv4JRV 其直接调用了memset这个符号,但是当然,这个符号是未定义的。

建议解决方案:

  • 使用gcc编译kservice.c文件时,默认加上编译选项-fno-tree-loop-distribute-patterns来阻止编译器自动生成memset等函数调用

或者:

  • 在每个CPU平台上分别使用汇编实现memset等函数,并相应定义为rt_memset的别名/宏定义/嵌套调用

FragrantRye avatar Jun 30 '22 12:06 FragrantRye

使用Segger Embeded Studio GCC编译RISC-V平台代码,同样出现过类似这个问题,默认编译选项-fno-tree-loop-distribute-patterns的方式,学习了!

chenyingchun0312 avatar Jul 01 '22 01:07 chenyingchun0312