Skip to content

feat(ostool): 支持可选 ELF 调试产物与元数据解析 - #193

Merged
ZR233 merged 4 commits into
drivercraft:mainfrom
MRNIU:feat/debug-artifacts
Sep 24, 2026
Merged

ZR233 merged 4 commits into
drivercraft:mainfrom
MRNIU:feat/debug-artifacts

Conversation

@MRNIU

@MRNIU MRNIU commented Sep 22, 2026

Copy link
Copy Markdown
Member

新增可选的反汇编、ELF 信息和符号列表产物,支持 Cargo 和自定义构建,默认关闭。

在 .build.toml 中启用:

[artifacts.analysis]
disassembly = true
elf_info = true
symbols = true
  • 产物写在原始 ELF 旁,文件名分别追加 .disassembly、.elf-info、.symbols。
  • ELF 信息包含架构、入口地址、加载段和可用的 __executable_start;缺失该符号不会导致构建失败。
  • 分析读取原始 ELF,避免运行时副本剥离符号的影响。
  • 每次构建重新生成已启用的产物;工具缺失、ELF 无效或生成失败时明确报错。

MRNIU and others added 4 commits September 22, 2026 15:23
新增默认关闭的 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>

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本 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(

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里是整个新分析管线的入口,但当前 head 已移除 ostool/src/build/analysis_tests.rs 和 ostool/tests/analysis_cli.rs,提交后的测试只覆盖配置解析和通用 runtime 状态。这样 CI 仍可能在产物未生成、误用剥离后的 ELF、工具失败未清理或 runner 配置时序回归时保持绿色。请至少保留一个聚焦的临时 ELF 集成/单元测试(配合可注入的工具解析器或实际 llvm-tools),覆盖三个开关、原始 ELF 选择、失败清理和 CLI/build-run 集成。

@MRNIU

MRNIU commented Sep 22, 2026

Copy link
Copy Markdown
Member Author

1 相关测试在 aarch64 上测试通过了
2 commit 中被删除的测试用例也全部通过
3 被删除的测试主要是对 llvm-tools 相关操作的测试,我认为意义不大,所以删掉了

@ZR233
ZR233 merged commit ee8061c into drivercraft:main Sep 24, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants