簡體   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