罕见编译选项

中端

后端

链接

–no-rosegment

该选项可以解决 PGO 的 bug,如果断言 Segment 等基本信息失败,则可以试试

该选项用来控制是否生成只读段(RO segment)。通常,链接器在输出 ELF 可执行文件时,会将 .text(代码)、.rodata(只读数据)这些只读段放入一个单独的 只读 Program Header Segment (PT_LOAD with PF_R),目的是节省内存和更好地支持共享库。
启用 --no-rosegment 后,链接器不会生成这个只读段,而是把只读内容合并进其他段(比如和 .data 一起)。直观来看,就是如图:
image 2.webp
可以看到第一个"LOAD"从 0 的 offset 开始。为什么需要这个选项:

  • 某些旧平台或启动加载器不支持只读段(RO segment)
  • 嵌入式系统
  • 自定义运行时环境