编译器罕见但重要的编译选项
罕见编译选项
中端
print-pipeline-passes
后端
链接
–no-rosegment
该选项可以解决 PGO 的 bug,如果断言 Segment 等基本信息失败,则可以试试
该选项用来控制是否生成只读段(RO segment)。通常,链接器在输出 ELF 可执行文件时,会将 .text
(代码)、.rodata
(只读数据)这些只读段放入一个单独的 只读 Program Header Segment (PT_LOAD with PF_R),目的是节省内存和更好地支持共享库。
启用 --no-rosegment
后,链接器不会生成这个只读段,而是把只读内容合并进其他段(比如和 .data
一起)。直观来看,就是如图:
可以看到第一个"LOAD"从 0 的 offset 开始。为什么需要这个选项:
- 某些旧平台或启动加载器不支持只读段(RO segment)
- 嵌入式系统
- 自定义运行时环境
评论