主要观点: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) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。