目标文件与排错¶
从 C 生成目标文件¶
./bisheng \
-target hiipu64-hisilicon-cce \
-Xclang -target-cpu \
-Xclang dav-c220-vec \
-O2 -c kernel.c -o kernel.o
从汇编生成目标文件¶
./bisheng -cc1as \
-triple hiipu64-hisilicon-cce \
-target-cpu dav-c220-vec \
-filetype obj -o kernel.o kernel.s
查看 ELF¶
readelf -h kernel.o
readelf -S kernel.o
readelf -s kernel.o
readelf -r kernel.o
readelf -x .text kernel.o
通用 file/readelf 可能把 e_machine=0x1029 显示为 unknown architecture,但仍能查看 ELF 头、节、符号、重定位和 .text 十六进制数据。
已有二进制的汇编¶
当前 bisheng 可以:
- 用
-S输出编译器生成的目标汇编; - 用
-cc1as -show-encoding显示已知汇编源码对应的机器码; - 生成 HiIPU ELF 目标文件。
它没有提供一个已经确认可对任意 c220 ELF 完整反汇编的驱动命令。对已有设备二进制,应优先使用配套的 Ascend 二进制工具;仅需要字节时可用 readelf -x .text,再依据本手册的编码掩码进行候选识别。
常见错误¶
| 现象 | 原因 | 处理 |
|---|---|---|
argument unused: -mcpu=... |
驱动不消费普通 -mcpu |
使用两个 -Xclang 参数 |
| builtin 不支持 target feature | CPU 未传入或选错 vec/cube | 检查 -target-cpu |
invalid operand |
操作数个数、后缀、寄存器类或专用格式错误 | 抽成单条指令交给 -cc1as |
instruction requires ... |
指令属于其他 DAV 代际 | 不要绕过 feature 检查 |
| inline asm backend error | 使用了 "r" 或类型不符合约束 |
改用 64 位标量/地址和 "l" |
file 显示 unknown arch 0x1029 |
通用工具没有 HiIPU 名称表 | 用 readelf 查看结构,不代表文件损坏 |
| 汇编通过但结果错误 | mask、shape、stride、事件或地址空间不正确 | 从 builtin 生成序列开始逐项替换 |
最小排错命令¶
./bisheng -cc1as \
-triple hiipu64-hisilicon-cce \
-target-cpu dav-c220-vec \
-filetype asm -show-encoding \
-o - failing.s
如果单条指令失败,先检查 操作数与格式类,再检查该助记符是否标记为“c220 汇编器接受”。