cuda-oxide:确认 codegen backend 符号导出

用 nm + grep 验证 rustc-codegen-cuda 把 __rustc_codegen_backend 这个入口符号正确导出来了。

📚 系列 cuda-oxide · 第 2 篇

写 rustc 的 codegen backend 时,关键导出符号是 __rustc_codegen_backend——rustc 通过 dlopen 加载 backend 动态库,会按这个名字找入口函数。所以 backend 编完,第一件事是验证这个符号有没有以全局函数的形式导出

两步搞定。

1. 导出符号表

nm -D crates/rustc-codegen-cuda/target/debug/librustc_codegen_cuda.so \
   > docs/rustc-codegen-cuda-table.md

-D 看的是动态符号表(dynsym),即动态链接器在 dlopen 时能看到的那一份——和 -a 全表区别开。

2. grep 找目标符号

grep __rustc_codegen_backend docs/rustc-codegen-cuda-table.md

输出:

0000000001d2c820 T __rustc_codegen_backend

T 表示代码段中的全局函数——正是我们想要的导出形式。

如果出现这些情况要回查

看到的含义通常原因
这一行不存在符号没编进去#[no_mangle] 漏了、或函数被 dead-code 干掉
t __rustc_codegen_backend(小写)局部符号,不导出pub 或没用 extern "Rust"
U __rustc_codegen_backend(未定义)引用但没定义backend crate 编错了,符号在别处

只有看到大写 T 才算 OK。

nm 输出的各种字母含义,见 nm 符号类型速查

评论区
评论功能即将上线, 敬请期待。