跳转至

目标文件与排错

从 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 汇编器接受”。