繁体   English   中英

区分 rv64imafd 和 rv64imafdc isa

[英]Differentiating between rv64imafd and rv64imafdc isa

如何在不执行它们的情况下区分 rv64imafd 和 rv64imafdc 二进制文件? 我使用很少的编译器标志来更改扩展,但我不确定如何验证它。 我不想每次都转储可执行文件以在我的 imafd 板上进行测试。
我试图研究这两个文件的 objdump,即使操作码之间存在明显差异,但这还不够。 让我知道我是否可以分享有关这方面的更多信息。

即使您使用 rv64imafd 标志进行编译,如果您链接到使用 rv64imadfc 编译的库(或 crt 文件),您的可执行文件也可以是 rv64imadfc。
这似乎是因为即使您编译为 rv64imafd,您的最终可执行文件也包含 c 标志。
如果您使用的是https://github.com/riscv/riscv-gnu-toolchain
构建默认以 rv64gc 为目标,因此您链接的是 rv64gc 库。 如果您使用了 --enable-multilib,您将链接到 rv64imafdc。

为了生成 rv64imafd 可执行文件,您有三个选择:

  • 使用 nostdlib 和 nostartfiles 选项并手动传递必要的文件(使用 rv64imafd 编译)。
  • 使用-march=rv64imafd -mabi=lp64d构建工具链
  • 修改t-elf-multilib以生成 rv64imafd 并使用--enable-multilib选项构建工具链。

可能需要objdump或执行等效解码级别的程序来确认二进制文件中不存在压缩指令。 但是,如果编译时启用了压缩指令,则 GNU 工具链生成的 ELF 可执行文件使用 elf 二进制文件的标志进行编码。

$readelf -h no_compressed.o 
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  ...
  Flags:                             0x4, double-float ABI
  ...
$ readelf -h compressed.o 
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  ...
  Flags:                             0x5, RVC, double-float ABI
  ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM