riscv-none-embed-gcc开启Link Time Optimazation(-flto)后的问题

startup_CH32Vxxx.S 中的中断声明 .weak 全部失效了。

那意味着,我自己写的、模板内的NMI_Handler等,全部没有了,全部转跳到 startup 内 XXX_Handler: 1: j 1b 这边了。

用的是最新版的套件Linux下1.3.0版 MRS Studio Community


目前的gcc 8.2.0使能-flto以后代码即使编译通过运行也有问题,等gcc更新吧。


我现在试下来,就是 weak 的问题,要不就是 _sbrk 被优化掉了导致链接报错。

后者可以通过添加 __attribute__((used)) 解决。

前者还没找到合适的方法,只有在startup.S内手动注释掉我需要的中断声明。


你们还有没有遇到其他问题?


-flto看上去能省不少空间,可是跑不起来啊。


使用xpack的risc-v gcc,10.2版。嗯 ,-flto 可以了。就是 __attribute__((interrupt("WCH-Interrupt-fast"))) 认不出来,然后某些扩展指令集优化没得了。

各有千秋吧。


我试过公版的gcc,10和12都试过,即使使能-flto以后也比WCH的8.2版本代码大很多

gcc还把CSR相关指令放到扩展中了,和现在的MRS不兼容。


只有登录才能回复,可以选择微信账号登录