基于 LLVM 的 Linux 内核递归环检测工具,重点识别:
- 直接自递归
- 多函数互递归
- 通过函数指针/回调形成的递归环
项目结构参考 src/uninit_checker,间接调用解析迁移自 mlta 设计,并保持独立的 IndirectCallResolver 模块。
工具分两步做递归判断:
- 构建跨模块调用图
- 直接调用:解析 declaration 到 definition
- 间接调用:使用 MLTA 解析函数指针目标
- 在调用图上做递归环筛选
- 先找 SCC
- 只要 SCC 表示存在自递归或互递归环,就报告
这意味着工具报告的是“可能递归环”,而不是只报告“必经无限递归”。
./build.shbuild/recursion-checker kernel.bc
build/recursion-checker --bc-list=bc.list
build/recursion-checker --filename=result.txt kernel.bcmake test