3

我克隆了 riscv-tools 存储库(master 分支)并遵循了构建过程。一切都很顺利。

然后我尝试为 RV32IM 指令集编译 hello world 程序,这样做:

riscv64-unknown-elf-gcc -m32 -march=RV32IM -o hello hello.c -save-temps

我使用选项 save-temps 来保留中间文件。(你好.s,你好.i,你好.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

它是命令语法错误还是反汇编程序尚不支持?

4

2 回答 2

5

我可以重现这一点并得到相同的错误消息。但是,riscv64-unknown-elf-objdump返回 0 并且输出文件确实包含没有伪指令和/或带有数字寄存器名称的汇编程序转储,如选项所要求的那样。所以看起来这就像预期的那样工作,它只是也输出了一个恼人的错误信息。

自 2 月以来,该riscv-toolsrepo 尚未更新。我还尝试使用更新版本的版本进行riscv-gnu-toolchain此操作,但在这里我没有收到错误消息。所以我想说这是一个已经修复的非关键错误,因此一旦在那里更新riscv-gnu-toolchain它就会被修复。riscv-toolsriscv-gnu-toolchain

于 2015-07-16T17:43:24.920 回答
0

你是对的,我确实收到了错误消息,但是当我查看汇编程序转储时,数字寄存器名称和非伪指令在文件中可见。

感谢您指出这只是打印的误导性错误消息...

于 2015-07-17T14:54:05.443 回答