用途:诊断 Linux 兼容 eBPF 程序在独立 PREVAIL 验证器(external/ebpf-verifier)中的验证失败,适用于用户提供 PREVAIL 错误或日志、询问验证失败原因、调试 PREVAIL YAML 测试失败或抽象解释问题,以及处理验证器内部(抽象域、widening、transformer)相关问题的场景。
主要能力:先阅读权威参考文档 external/ebpf-verifier/docs/llm-context.md,其中包含日志输出解读(寄存器状态、栈状态、不变量)、术语与类型组词汇表、常见失败模式及成因与修复、进阶主题(widening、路径不敏感、指针来源)和分步推理协议。随后收集错误信息(<pc>: <message> (<assertion>) 行、失败指令的 pre-invariant、前 3–5 条指令、程序源码、map/context 定义),匹配常见失败模式(未初始化寄存器、无界包访问、栈越界、空指针、类型不匹配、指针算术错误、无限循环、除零、map 键值不匹配、context 越界、验证器精度限制等),回溯根因并给出修复建议。
使用方式:按步骤先读参考文档,再收集错误与上下文,识别失败模式,追踪根因,最后给出解释、缺失约束与具体代码修复;若属验证器限制,建议直接指针比较、重构控制流等变通方法。
限制:PREVAIL 比 Linux 内核验证器更保守,Linux 接受的代码可能被拒;它是路径不敏感的,每个程序点使用单一抽象状态,跨分支的相关条件可能丢失;循环头部的 widening 可能破坏约束。不要假设寄存器具有未出现在 pre-invariant 中的类型或约束。若程序使用 Windows 专用 helper 或头文件、需要 bpf2c 流水线、或需将 .c 编译为 .o,应改用 verify-bpf。