主要观点:LLVM 项目中的 MC 库负责处理汇编、反汇编和对象文件格式,2010 年的相关介绍仍有助于理解其高层结构,近期致力于改进内部表示以提升性能和可读性,包括合并MCAsmLayout
到MCAssembler
、优化片段(Fragments
)、处理符号(Symbols
)、改进节(Sections
)处理、调整节符号、优化表达式评估、将目标特定功能移至相应目标实现、支持 CREL 等,同时还对汇编解析器进行了改进,过去的 releases 也有一些 notable 优化,未来有符号重新定义、解决 Mach-O 弱点等规划。
关键信息:
- 合并
MCAsmLayout
到MCAssembler
以简化代码并移除相关头文件。 - 对片段的大小进行优化,如减少
MCInst
内联元素计数等,还将片段管理系统从双向链表改为单向链表。 @aengelke
对符号相关性能进行改进,如不评估无名符号等,还改进了MCObjectStreamer
中的标签处理。- 精简节处理,利用“当前片段”概念消除节栈,还调整了节符号相关处理。
- 移除表达式评估中的懒评估,改用急切片段松弛。
- 将目标特定功能移至相应目标实现以清理类层次结构。
- 集成汇编器支持 ELF 的 CREL,但该功能不稳定。
- 对汇编解析器进行了多项改进,如支持
.irp/.irpc/.rept
的调用计数等。
重要细节: MCAssembler::relaxOnce
函数用于松弛片段,通过遍历节和片段来更新偏移量。- 在符号处理中,新定义的标签最初分配给
MCDummyFragment
,后续会重新分配。 - 节处理中通过“当前片段”概念简化代码并提高效率,还发现了 NVPTX 汇编中的有趣问题。
- 对表达式评估的改进消除了复杂的递归检测等问题。
- 过去的 releases 中对
MCCodeEmitter
和relaxInstruction
等进行了优化。 - 未来规划包括解决符号重新定义问题、改进 Mach-O 弱点等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。