[PATCH v3] CSKY: Fix sprintf argument overlaping destination error.

Nick Clifton nickc@redhat.com
Thu Sep 10 08:59:43 GMT 2020


Hi Cooper,

  One of your recent CSKY patches triggered a build failure for 32-bit
  hosts, because the definition of the CSKY_ISA_FLOAT_7E60 constant does
  not fit into a long int.  There was also a small issue with one of the
  sprintf's trying to put long long values into a long format conversion
  operator.  I have applied the patch below as an obvious fix.

Cheers
  Nick

include/ChangeLog
2020-09-10  Nick Clifton  <nickc@redhat.com>

	* opcode/csky.h (CSKY_ISA_FLOAT_7E60): Use a long long type for
	this value.

opcodes/ChangeLog
2020-09-10  Nick Clifton  <nickc@redhat.com>

	* csky-dis.c (csky_output_operand): Coerce the immediate values to
	long before printing.


diff --git a/include/opcode/csky.h b/include/opcode/csky.h
index 421454383e..717e8a949d 100644
--- a/include/opcode/csky.h
+++ b/include/opcode/csky.h
@@ -58,7 +58,7 @@
 /* 807 support (803f & 807f).  */
 #define CSKY_ISA_FLOAT_3E4  (1L << 28)
 /* 860 support.  */
-#define CSKY_ISA_FLOAT_7E60 (1L << 36)
+#define CSKY_ISA_FLOAT_7E60 (1LL << 36)
 /* Vector DSP support.  */
 #define CSKY_ISA_VDSP       (1L << 29)
 #define CSKY_ISA_VDSP_2     (1L << 30)
diff --git a/opcodes/csky-dis.c b/opcodes/csky-dis.c
index 78ff055c3d..450a9bed0b 100644
--- a/opcodes/csky-dis.c
+++ b/opcodes/csky-dis.c
@@ -675,7 +675,7 @@ csky_output_operand (char *str, struct operand const *oprnd,
 	  }
 	double d = 0;
 	memcpy (&d, &dvalue, sizeof (double));
-	sprintf (buf, "%lf\t// imm9:%4ld, imm4:%2ld", d, imm8, imm4);
+	sprintf (buf, "%lf\t// imm9:%4ld, imm4:%2ld", d, (long) imm8, (long) imm4);
 	strcat (str, buf);
 	break;
       }



More information about the Binutils mailing list