使用riscv32工具链时如何禁用指令压缩以生成纯32位指令
RISC-V GCC生成完全无压缩32位指令解决方案
要彻底关闭GCC的RISC-V指令压缩,仅调整-march参数不足以覆盖默认配置,按以下步骤操作即可:
- 同时指定无C扩展的架构标识和对应ABI,示例如下(可根据你需要的扩展调整,注意不要加
c后缀):-march=rv32im -mabi=ilp32 - 追加
-mno-compress强制关闭指令压缩功能,该参数优先级高于架构的默认配置 - 若编译后仍有压缩指令,追加
-mno-relax关闭链接器松弛优化,部分GCC版本的链接器开启松弛时会主动将32位指令替换为16位压缩指令降低体积 - 编译完成后可通过
objdump -d 目标可执行文件反汇编,验证输出的所有指令均为32位长度
注意:如果编译时链接了预编译的静态库、CRT启动文件,需要先使用上述参数重新编译所有依赖组件,否则预编译组件内自带的压缩指令仍会出现在最终产物中。
内容的提问来源于stack exchange,提问作者SweetCaffe
相关产品推荐
相关产品推荐

