[英]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 可执行文件,您有三个选择:
-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.