overview

CompCert 源码总体分析(总览)

1. 仓库定位与总体结构

2. 编译流水线(高层)

该流水线的精确组合定义在 driver/Compiler.v,驱动入口在 driver/Driver.ml

2.1 源码到 AST

  1. 预处理:driver/Frontend.ml 调用外部预处理器(Configuration.prepro)并设置宏
  2. 解析 + 语义化:cparser/Parse.ml
    • Lexer + Menhir parser 生成 Cabs
    • ElabCabs 变换为简化/类型化的 C AST
    • transform_programUnblockSwitchNormPackedStructsStructPassingRename
  3. 生成 CompCert C:cfrontend/C2C.ml 将前端 AST 转为 Csyntax

2.2 语义与 IR 变换

流水线由 Compiler.transf_*_program 定义(driver/Compiler.v): - CsyntaxSimplExprClight - ClightSimplLocalsCsharpminor - CsharpminorCminorgenCminor - CminorSelectionCminorSel - CminorSelRTLgenRTL - RTL 级优化与后端: - TailcallInliningRenumber - ConstpropRenumber - CSEDeadcodeUnusedglob - Allocation(寄存器分配) - TunnelingLinearizeCleanupLabels - Debugvar(可选) - StackingMach - AsmgenAsm - 驱动层随后调用 Asmexpand.expand_program(架构相关)做汇编级扩展

3. 驱动层执行路径(ccomp

4. 形式化证明与抽取

5. 目标架构抽象

6. 文档与可执行工具

7. 子报告索引