Avoid creating symbol table entries for registers
authorAndrew Waterman <andrew@sifive.com>
Tue, 20 Dec 2016 22:25:33 +0000 (14:25 -0800)
committerAlan Modra <amodra@gmail.com>
Wed, 21 Dec 2016 13:49:47 +0000 (00:19 +1030)
Instructions like "jal t0, foo" were erroneously creating symbol table
entries for t0 as well as foo, which causes linking problems.  Fix by
reordering instruction alternatives so that t0 is first attempted to
be parsed as a register, rather than as a symbol.

* riscv-opc.c (riscv_opcodes): Reorder jal and call entries.

opcodes/ChangeLog
opcodes/riscv-opc.c

index d009f23..128bb23 100644 (file)
@@ -1,3 +1,7 @@
+2016-12-21 Andrew Waterman <andrew@sifive.com>
+
+       * riscv-opc.c (riscv_opcodes): Reorder jal and call entries.
+
 2016-12-20  Maciej W. Rozycki  <macro@imgtec.com>
 
        * mips-dis.c (mips_arch_choices): Use ISA_MIPS64 rather than
index 3c732fd..464078d 100644 (file)
@@ -143,11 +143,11 @@ const struct riscv_opcode riscv_opcodes[] =
 {"jalr",      "I",   "d,s,j",  MATCH_JALR, MASK_JALR, match_opcode, 0 },
 {"j",         "C",   "Ca",  MATCH_C_J, MASK_C_J, match_opcode, INSN_ALIAS },
 {"j",         "I",   "a",  MATCH_JAL, MASK_JAL | MASK_RD, match_opcode, INSN_ALIAS },
+{"jal",       "I",   "d,a",  MATCH_JAL, MASK_JAL, match_opcode, 0 },
 {"jal",       "32C", "Ca",  MATCH_C_JAL, MASK_C_JAL, match_opcode, INSN_ALIAS },
 {"jal",       "I",   "a",  MATCH_JAL | (X_RA << OP_SH_RD), MASK_JAL | MASK_RD, match_opcode, INSN_ALIAS },
-{"jal",       "I",   "d,a",  MATCH_JAL, MASK_JAL, match_opcode, 0 },
-{"call",      "I",   "c", (X_T1 << OP_SH_RS1) | (X_RA << OP_SH_RD), (int) M_CALL,  match_never, INSN_MACRO },
 {"call",      "I",   "d,c", (X_T1 << OP_SH_RS1), (int) M_CALL,  match_never, INSN_MACRO },
+{"call",      "I",   "c", (X_T1 << OP_SH_RS1) | (X_RA << OP_SH_RD), (int) M_CALL,  match_never, INSN_MACRO },
 {"tail",      "I",   "c", (X_T1 << OP_SH_RS1), (int) M_CALL,  match_never, INSN_MACRO },
 {"jump",      "I",   "c,s", 0, (int) M_CALL,  match_never, INSN_MACRO },
 {"nop",       "C",   "",  MATCH_C_ADDI, 0xffff, match_opcode, INSN_ALIAS },