RISCV反汇编选项数字和非别名

时间:2015-07-16 13:44:00

标签: disassembly riscv

我克隆了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

这是一个命令语法错误还是反汇编程序还没有支持它?

2 个答案:

答案 0 :(得分:5)

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

自{Feb}以来riscv-tools个回购没有更新。我还尝试使用更新版本的riscv-gnu-toolchain进行更新,此处我没有收到错误消息。所以我说这是一个已经在riscv-gnu-toolchain中修复过的非严重错误,因此只要在riscv-tools更新riscv-gnu-toolchain,它就会被修复。< / p>

答案 1 :(得分:0)

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

感谢您指出这只是一个误导性的错误信息,打印出来......