我克隆了riscv-tools存储库(master分支)并遵循构建过程。一切都很顺利。
然后我尝试为RV32IM指令集编译hello world程序,执行此操作:
riscv64-unknown-elf-gcc -m32 -march=RV32IM -o hello hello.c -save-temps
我使用选项save-temps来保存中间文件。 (hello.s,hello.i,hello.o)
到目前为止一切正常,我可以用以下方式运行hello world程序:
spike pk hello
Hello world!
现在我想看看这个程序的汇编代码。我做了以下操作,并将汇编代码放入hello.dump
riscv64-unknown-elf-objdump -D -S -l -F hello.o > hello.o.dump
现在我有兴趣看到的是没有伪指令和非ABI寄存器名称的汇编代码。
当我这样做时,似乎可以得到它:
riscv64-unknown-elf-objdump --target-help
我明白了:
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.
但是,当我尝试添加这些选项时,它不起作用。
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
这是一个命令语法错误还是反汇编程序还没有支持它?
答案 0 :(得分:5)
我可以重现这个并获得相同的错误消息。但是,riscv64-unknown-elf-objdump
返回0并且输出文件确实包含没有伪指令和/或数字寄存器名称的汇编程序转储,如选项所请求的那样。所以看起来它正如预期的那样工作,它也只是输出一个恼人的错误信息。
自{Feb}以来riscv-tools
个回购没有更新。我还尝试使用更新版本的riscv-gnu-toolchain
进行更新,此处我没有收到错误消息。所以我说这是一个已经在riscv-gnu-toolchain
中修复过的非严重错误,因此只要在riscv-tools
更新riscv-gnu-toolchain
,它就会被修复。< / p>
答案 1 :(得分:0)
你是对的,我收到了错误信息,但是当我查看汇编程序转储时,文件中可以看到数字寄存器名称和非伪指令。
感谢您指出这只是一个误导性的错误信息,打印出来......