LLVM 19 中的集成汇编器改进

主要观点:LLVM 项目中的 MC 库负责处理汇编、反汇编和对象文件格式,2010 年的相关介绍仍有助于理解其高层结构,近期致力于改进内部表示以提升性能和可读性,包括合并MCAsmLayoutMCAssembler、优化片段(Fragments)、处理符号(Symbols)、改进节(Sections)处理、调整节符号、优化表达式评估、将目标特定功能移至相应目标实现、支持 CREL 等,同时还对汇编解析器进行了改进,过去的 releases 也有一些 notable 优化,未来有符号重新定义、解决 Mach-O 弱点等规划。
关键信息

  • 合并MCAsmLayoutMCAssembler以简化代码并移除相关头文件。
  • 对片段的大小进行优化,如减少MCInst内联元素计数等,还将片段管理系统从双向链表改为单向链表。
  • @aengelke对符号相关性能进行改进,如不评估无名符号等,还改进了MCObjectStreamer中的标签处理。
  • 精简节处理,利用“当前片段”概念消除节栈,还调整了节符号相关处理。
  • 移除表达式评估中的懒评估,改用急切片段松弛。
  • 将目标特定功能移至相应目标实现以清理类层次结构。
  • 集成汇编器支持 ELF 的 CREL,但该功能不稳定。
  • 对汇编解析器进行了多项改进,如支持.irp/.irpc/.rept的调用计数等。
    重要细节
  • MCAssembler::relaxOnce函数用于松弛片段,通过遍历节和片段来更新偏移量。
  • 在符号处理中,新定义的标签最初分配给MCDummyFragment,后续会重新分配。
  • 节处理中通过“当前片段”概念简化代码并提高效率,还发现了 NVPTX 汇编中的有趣问题。
  • 对表达式评估的改进消除了复杂的递归检测等问题。
  • 过去的 releases 中对MCCodeEmitterrelaxInstruction等进行了优化。
  • 未来规划包括解决符号重新定义问题、改进 Mach-O 弱点等。
阅读 17
0 条评论