diff options
author | Andrew Waterman <waterman@cs.berkeley.edu> | 2016-03-14 13:15:39 -0700 |
---|---|---|
committer | Andrew Waterman <waterman@cs.berkeley.edu> | 2016-03-14 13:15:39 -0700 |
commit | 6604b51118d7b8e91c3d1ffb8236402279a4d4d9 (patch) | |
tree | 5f224353f40857c4b97b3c947b624ce17de53828 /binutils | |
parent | 235e1fae5fba6fa639b8164b5093c1df9a6a9e31 (diff) | |
download | riscv-gnu-toolchain-6604b51118d7b8e91c3d1ffb8236402279a4d4d9.zip riscv-gnu-toolchain-6604b51118d7b8e91c3d1ffb8236402279a4d4d9.tar.gz riscv-gnu-toolchain-6604b51118d7b8e91c3d1ffb8236402279a4d4d9.tar.bz2 |
binutils: disassemble jalr/ld/st addresses with x0 base
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/opcodes/riscv-dis.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/binutils/opcodes/riscv-dis.c b/binutils/opcodes/riscv-dis.c index 6ec603c..535a265 100644 --- a/binutils/opcodes/riscv-dis.c +++ b/binutils/opcodes/riscv-dis.c @@ -106,7 +106,7 @@ maybe_print_address (struct riscv_private_data *pd, int base_reg, int offset) } else if (base_reg == X_GP && pd->gp != (bfd_vma)-1) pd->print_addr = pd->gp + offset; - else if (base_reg == X_TP) + else if (base_reg == X_TP || base_reg == 0) pd->print_addr = offset; } @@ -275,7 +275,8 @@ print_insn_args (const char *d, insn_t l, bfd_vma pc, disassemble_info *info) case 'o': maybe_print_address (pd, rs1, EXTRACT_ITYPE_IMM (l)); case 'j': - if ((l & MASK_ADDI) == MATCH_ADDI || (l & MASK_JALR) == MATCH_JALR) + if (((l & MASK_ADDI) == MATCH_ADDI && rs1 != 0) + || (l & MASK_JALR) == MATCH_JALR) maybe_print_address (pd, rs1, EXTRACT_ITYPE_IMM (l)); print (info->stream, "%d", (int) EXTRACT_ITYPE_IMM (l)); break; |