我克隆了riscv-tools存储库(主分支),并遵循构建过程。一切都很好。
然后,我尝试为RV32IM指令集编译hello world程序,方法是:
riscv64-unknown-elf-gcc -m32 -march=RV32IM -o hello hello.c -save-temps
Run Code Online (Sandbox Code Playgroud)
我使用选项save-temps保留中间文件。(hello.s,hello.i,hello.o)
到目前为止一切正常,我可以使用以下命令运行hello world程序:
spike pk hello
Hello world!
Run Code Online (Sandbox Code Playgroud)
现在,我想看看该程序的汇编代码。我做了以下工作,并将汇编代码放到了hello.dump中
riscv64-unknown-elf-objdump -D -S -l -F hello.o > hello.o.dump
Run Code Online (Sandbox Code Playgroud)
现在,我将感兴趣的是没有伪指令且具有非ABI寄存器名称的汇编代码。
当我这样做时,似乎可以做到:
riscv64-unknown-elf-objdump --target-help
Run Code Online (Sandbox Code Playgroud)
我得到这个:
The following RISC-V-specific disassembler options are supported for use
with the -M switch (multiple options should be separated by commas):
numeric Print numeric reigster names, rather than ABI names.
no-aliases Disassemble only into canonical instructions, rather
than into pseudoinstructions.
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试添加这些选项时,它不起作用。
riscv64-unknown-elf-objdump -D -S -l -F -Mno-aliases hello.o > hello.o.dump
Unrecognized disassembler option: no-aliases
riscv64-unknown-elf-objdump -D -S -l -F -Mnumeric hello.o > hello.o.dump
Unrecognized disassembler option: numeric
riscv64-unknown-elf-objdump -D -S -l -F -Mnumeric,no-aliases hello.o > hello.o.dump
Unrecognized disassembler option: numeric
Unrecognized disassembler option: no-aliases
Run Code Online (Sandbox Code Playgroud)
它是命令语法错误还是反汇编器尚不支持?
我可以重现此错误并获得相同的错误消息。然而,riscv64-unknown-elf-objdump根据选项的要求返回0,并且输出文件中确实包含没有伪指令和/或具有数字寄存器名称的汇编器转储。因此,这似乎按预期方式工作,它还会输出令人讨厌的错误消息。
riscv-tools自2月份以来,该回购协议尚未更新。我还使用更新版本的尝试了此操作,riscv-gnu-toolchain在此我没有收到错误消息。因此,我想说这是一个非关键错误,已经修复riscv-gnu-toolchain,因此将在此更新后riscv-tools立即修复riscv-gnu-toolchain。
| 归档时间: |
|
| 查看次数: |
971 次 |
| 最近记录: |