blob: 4d9a3517be9052cf6ec2b00ac8cc0616bb1d2617 [file] [log] [blame]
#!/bin/sh
# A tool to disassemble one riscv64 instruction.
if [ "$#" -ne 1 ]; then
echo "Usage:"
echo " $ riscv64-disasm 0x60469613"
echo "0: 60469613 sext.b a2,a3"
echo
echo " The prefix \"0x\" is optional. Compressed instructions are also allowed."
exit
fi
TEMP="$(mktemp)"
INSN="0x$(echo $1 | sed -e "s/^0x//")"
echo ".text" > "$TEMP.S"
echo ".word $INSN" >> "$TEMP.S"
# riscv objdump only understands extensions in elf files, so we cannot
# disassemble a pure binary.
# Add needed extensions to march when required.
riscv64-linux-gnu-as -march=rv64gc_zba_zbb_zbs_v -o "$TEMP.o" "$TEMP.S"
# Assembler marks .word bytes as data pool ("$d"), and objdump doesn't
# disassemble such instructions. Strip symbols to force instruction disassembly.
riscv64-linux-gnu-strip "$TEMP.o"
riscv64-linux-gnu-objdump -M numeric -d "$TEMP.o" | sed '0,/<.text>/d'
rm "$TEMP.S" "$TEMP.o"