demand_copy_C_string NUL check
[binutils-gdb.git] / opcodes / arc-dis.c
index 131aee6b34e546f69fe8b93f4d96d0884c7db21b..6a6404a162428bcc06fd1fddddc412e74c2ca936 100644 (file)
@@ -1,5 +1,5 @@
 /* Instruction printing code for the ARC.
-   Copyright (C) 1994-2020 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
    Contributed by Claudiu Zissulescu (claziss@synopsys.com)
 
@@ -420,7 +420,7 @@ find_format (bfd_vma                       memaddr,
              struct arc_operand_iterator * iter)
 {
   const struct arc_opcode *opcode = NULL;
-  bfd_boolean needs_limm;
+  bfd_boolean needs_limm = FALSE;
   const extInstruction_t *einsn, *i;
   unsigned limm = 0;
   struct arc_disassemble_info *arc_infop = info->private_data;
@@ -437,7 +437,7 @@ find_format (bfd_vma                       memaddr,
          if (opcode == NULL)
            {
              (*info->fprintf_func) (info->stream,
-                                    _("An error occured while generating the "
+                                    _("An error occurred while generating the "
                                       "extension instruction operations"));
              *opcode_result = NULL;
              return FALSE;
@@ -483,7 +483,7 @@ find_format (bfd_vma                       memaddr,
 
   /* Update private data.  */
   arc_infop->opcode = opcode;
-  arc_infop->limm = (needs_limm) ? limm : 0;
+  arc_infop->limm = limm;
   arc_infop->limm_p = needs_limm;
 
   return TRUE;
@@ -1269,11 +1269,19 @@ print_insn_arc (bfd_vma memaddr,
          if (!rname)
            rname = regnames[value];
          (*info->fprintf_func) (info->stream, "%s", rname);
+
+         /* Check if we have a double register to print.  */
          if (operand->flags & ARC_OPERAND_TRUNCATE)
            {
-             rname = arcExtMap_coreRegName (value + 1);
-             if (!rname)
-               rname = regnames[value + 1];
+             if ((value & 0x01) == 0)
+               {
+                 rname = arcExtMap_coreRegName (value + 1);
+                 if (!rname)
+                   rname = regnames[value + 1];
+               }
+             else
+               rname = _("\nWarning: illegal use of double register "
+                         "pair.\n");
              (*info->fprintf_func) (info->stream, "%s", rname);
            }
          if (value == 63)