feat(ostool): 支持可选 ELF 调试产物与元数据解析 - #193
Conversation
新增默认关闭的 artifacts.analysis 配置,复用 Rust 工具链 LLVM 和现有 artifact registry 生成反汇编、ELF 信息与符号列表。通过 object 解析架构、 入口、PT_LOAD 与可选 __executable_start,显式请求失败时返回具体错误。 分离原始 ELF 和运行时副本,避免 .elf 输入原地覆盖;添加 BIN 时保留 符号来源与调试产物登记,新构建则清理旧登记。完整 BuildConfig 接入 构建与运行入口,保留 Cargo 选择、hooks 和 Custom runner 配置读取顺序。 同步中英文 README 与公开 API 编译用例。 验证:devbox 原生格式化、workspace clippy/build/test 全部通过; ostool all-targets/all-features clippy -D warnings 通过。新增实际 LLVM 产物、ELF metadata、状态更新和 CLI hook 回归测试。 x86_64 CI 命令已尝试,本地因缺少交叉 sysroot/libudev 与 C 编译器阻塞。 Co-authored-by: OpenAI Codex <codex@openai.com> Signed-off-by: Niu Zhihong <zhihong@nzhnb.com>
复用 tempfile 管理分析产物的临时文件和替换,移除手工暂存路径及重复的 runtime 来源状态。将完整配置运行入口收窄为 cargo_run_with_config, Custom CLI 继续在构建完成后读取 runner 配置,并同步中英文说明。 删除重复成功/路径/默认配置断言和 ELF32 大端专项夹具,合并状态更新与 runner hooks 测试;保留 ELF 元数据、错误处理、strip 来源和构建兼容覆盖。 Co-authored-by: OpenAI Codex <codex@openai.com> Signed-off-by: Niu Zhihong <zhihong@nzhnb.com>
删除 metadata 层重复的非法 ELF 验证,保留分析入口的失败回归。 将 Custom build-only 状态断言并入重建测试,删除配置通用序列化 往返及可由其他检查推出的断言。简化无符号 ELF 与 PT_NOTE 夹具, 保留多段地址区分、符号定义状态和原始 ELF 来源验证。 Co-authored-by: OpenAI Codex <codex@openai.com> Signed-off-by: Niu Zhihong <zhihong@nzhnb.com>
移除独立构建与 CLI 分析验收文件、手工 ELF 测试夹具和假工具测试。 完整场景保留为本地验收,仓库仅新增短配置解析测试,并在已有 runtime/build 用例中验证源 ELF 不被覆写及旧分析登记失效。 移除只用于测试注入的 resolver 包装,直接调用既有 LLVM 定位函数。 产物生成、metadata 解析及错误处理行为保持一致。 Co-authored-by: OpenAI Codex <codex@openai.com> Signed-off-by: Niu Zhihong <zhihong@nzhnb.com>
There was a problem hiding this comment.
本 PR 为 .build.toml 增加可选的 ELF 反汇编、ELF 元数据和符号产物,并将其接入 Cargo/Custom 构建、QEMU、U-Boot 和 board 流程;分析使用 Rust 工具链中的 LLVM 工具,且保留原始 ELF 以避免运行时副本剥离符号。未启用时现有配置保持默认行为;启用后工具或 ELF 错误会在 runner 启动前返回,属于对构建/运行路径的预期扩展。
验证情况:head 上的 GitHub check (stable, x86_64-unknown-linux-gnu) 已成功;review helper 自测 7 项通过,git diff --check 通过。本地无法重复 cargo fmt、clippy 和测试,因为 reviewer 环境没有 cargo(/bin/sh: cargo: not found);没有发现由 PR 导致的 CI 失败,也未宣称已验证 QEMU、串口或真实开发板。此前没有该 PR 的 review、inline comment 或 issue comment。相似变更方面,已参考已合并的 PR #140(toolchain llvm-objcopy 路径),并注意到已关闭的 PR #129 包含重叠的 analysis/boot 方向;未发现需要合并的当前重复实现。
没有发现需要阻止合并的明确正确性问题。剩余的主要风险是新分析管线缺少提交到当前 head 的端到端自动化覆盖,详见下面的 advisory comment;此外硬件/runner 行为仍未在本环境实测。
Powered by gpt-5.6-luna
| /// | ||
| /// Outputs are staged in sibling paths and registered only after all succeed. | ||
| /// A failure removes both temporary paths and any stale requested analysis outputs. | ||
| pub(crate) fn generate( |
There was a problem hiding this comment.
这里是整个新分析管线的入口,但当前 head 已移除 ostool/src/build/analysis_tests.rs 和 ostool/tests/analysis_cli.rs,提交后的测试只覆盖配置解析和通用 runtime 状态。这样 CI 仍可能在产物未生成、误用剥离后的 ELF、工具失败未清理或 runner 配置时序回归时保持绿色。请至少保留一个聚焦的临时 ELF 集成/单元测试(配合可注入的工具解析器或实际 llvm-tools),覆盖三个开关、原始 ELF 选择、失败清理和 CLI/build-run 集成。
|
1 相关测试在 aarch64 上测试通过了 |
新增可选的反汇编、ELF 信息和符号列表产物,支持 Cargo 和自定义构建,默认关闭。
在
.build.toml中启用:.disassembly、.elf-info、.symbols。__executable_start;缺失该符号不会导致构建失败。