环境
- 涉及库:libgalaxyhip.so(libamdhip64.so 符号链接指向同一个库)
- 已验证版本:
- DTK 24.04.3 —— 存在
- DTK 25.04.4 —— 存在
- DTK 26.04 —— 存在
问题描述
DTK 的 HIP runtime 导出的扩展符号名为 hipExtGetNearstCPU,其中 "Nearest" 拼成了 "Nearst",缺少一个字母 e。按命名规范应为 hipExtGetNearestCPU。
该符号目前只有 Hygon 的库导出,ROCm 官方库没有这个拼写,因此它常被用作 DTK runtime 的区分特征。
复现步骤
单文件 C 程序,不需要 DTK 开发头文件,只做动态加载 + 符号查找:
#include
#include
int main (int argc, char *argv[])
{
const char *lib = (argc > 1) ? argv[1] : "libamdhip64.so";
void *h = dlopen (lib, RTLD_NOW | RTLD_LOCAL);
if (h == NULL)
{
fprintf (stderr, "dlopen(\"%s\") failed: %s\n", lib, dlerror ());
return 1;
}
printf ("%-28s: %s\n", "hipExtGetNearstCPU (DTK)",
dlsym (h, "hipExtGetNearstCPU") ? "FOUND" : "NOT FOUND");
printf ("%-28s: %s\n", "hipExtGetNearestCPU (fixed)",
dlsym (h, "hipExtGetNearestCPU") ? "FOUND" : "NOT FOUND");
printf ("%-28s: %s\n", "hipGetDeviceCount (control)",
dlsym (h, "hipGetDeviceCount") ? "FOUND" : "NOT FOUND");
dlclose (h);
return 0;
}
编译并运行:
cc -o dtk_symbol_check dtk_symbol_check.c -ldl
./dtk_symbol_check
实际输出
影响
1. 在 DTK 上,拼错的名字能查到、拼对的名字查不到,说明这是导出符号的拼写错误,而非别名。
2. 外部项目(如 hashcat)一直拿这个拼错符号做 DTK runtime 识别。hashcat 侧已针对两个拼写做兼容并合并,但依赖错误拼写作为长期特征并不稳固:若日后 DTK 修正拼写,旧名字消失,基于旧名字的识别会失效。
3. 希望源头统一为正确拼写,避免其他项目继续踩这个坑。
建议
- 将导出符号修正为 hipExtGetNearestCPU;
- 如需向后兼容,可保留 hipExtGetNearstCPU 作为别名过渡一段时间。