vax decoding of indexed addressing mode
[deliverable/binutils-gdb.git] / opcodes / metag-dis.c
index 8a03a92ec5369ea2ceb22308db4ce29c93660863..e2926b315002b576c9d686af59048eca555b245e 100644 (file)
@@ -1,5 +1,5 @@
 /* Disassemble Imagination Technologies Meta instructions.
-   Copyright (C) 2013 Free Software Foundation, Inc.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
    Contributed by Imagination Technologies Ltd.
 
    This library is free software; you can redistribute it and/or modify
@@ -18,7 +18,7 @@
    MA 02110-1301, USA.  */
 
 #include "sysdep.h"
-#include "dis-asm.h"
+#include "disassemble.h"
 #include "opintl.h"
 
 #include <stdio.h>
@@ -33,7 +33,7 @@
 
 #define OPERAND_WIDTH   92
 #define ADDR_WIDTH      20
-#define REG_WIDTH       50
+#define REG_WIDTH       64
 #define DSP_PREFIX_WIDTH 17
 
 /* Value to print if we fail to parse a register name.  */
@@ -1762,7 +1762,11 @@ print_fmmov (unsigned int insn_word, bfd_vma pc ATTRIBUTE_UNUSED,
            const insn_template *template,
            disassemble_info *outf)
 {
-  char buf[OPERAND_WIDTH];
+  /* We used to have buf[OPERAND_WIDTH] here, but gcc v8 complains
+     about the snprintf()s below possibly truncating the output.
+     (There is no way to tell gcc that this truncation is intentional).
+     So now we use an extra wide buffer.  */
+  char buf[OPERAND_WIDTH * 2];
   char data_buf[REG_WIDTH];
   char fpu_buf[REG_WIDTH];
   bfd_boolean to_fpu = MAJOR_OPCODE (insn_word) == OPC_GET;
@@ -1783,9 +1787,9 @@ print_fmmov (unsigned int insn_word, bfd_vma pc ATTRIBUTE_UNUSED,
                   convert_fx_rmask (rmask), is_mmovl);
 
   if (to_fpu)
-    snprintf (buf, OPERAND_WIDTH, "%s,%s", fpu_buf, data_buf);
+    snprintf (buf, sizeof buf, "%s,%s", fpu_buf, data_buf);
   else
-    snprintf (buf, OPERAND_WIDTH, "%s,%s", data_buf, fpu_buf);
+    snprintf (buf, sizeof buf, "%s,%s", data_buf, fpu_buf);
 
   print_insn (outf, "F", template->name, buf);
 }
@@ -3360,6 +3364,7 @@ print_insn_metag (bfd_vma pc, disassemble_info *outf)
   bfd_byte buf[4];
   unsigned int insn_word;
   size_t i;
+  outf->bytes_per_chunk = 4;
 
   (*outf->read_memory_func) (pc & ~0x03, buf, 4, outf);
   insn_word = bfd_getl32 (buf);
This page took 0.031306 seconds and 4 git commands to generate.