aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2016-03-14 13:15:39 -0700
committerAndrew Waterman <waterman@cs.berkeley.edu>2016-03-14 13:15:39 -0700
commit6604b51118d7b8e91c3d1ffb8236402279a4d4d9 (patch)
tree5f224353f40857c4b97b3c947b624ce17de53828 /binutils
parent235e1fae5fba6fa639b8164b5093c1df9a6a9e31 (diff)
downloadriscv-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.c5
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;