This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fix disassembling of TIC6X parallel instructions where the previous fetch packet ended with a 32-bit


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=8ec5cf65a8213988a9f861e6a94d12311e9b04c3

commit 8ec5cf65a8213988a9f861e6a94d12311e9b04c3
Author: Alexis Deruell <alexis.deruelle@gmail.com>
Date:   Fri Jan 27 12:00:55 2017 +0000

    Fix disassembling of TIC6X parallel instructions where the previous fetch packet ended with a 32-bit insn.
    
    	PR 21056
    opcodes	* tic6x-dis.c (print_insn_tic6x): Correct displaying of parallel
    	instructions when the previous fetch packet ends with a 32-bit
    	instruction.
    
    gas	* testsuite/gas/tic6x/insns16-parallel.s: New test case.
    	* testsuite/gas/tic6x/insns16-parallel.d: New test driver.

Diff:
---
 gas/ChangeLog                              |  6 +++++
 gas/testsuite/gas/tic6x/insns16-parallel.d | 43 ++++++++++++++++++++++++++++++
 gas/testsuite/gas/tic6x/insns16-parallel.s | 42 +++++++++++++++++++++++++++++
 opcodes/ChangeLog                          |  7 +++++
 opcodes/tic6x-dis.c                        | 13 +++++++--
 5 files changed, 109 insertions(+), 2 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index d21f8bc..de3b9b0 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2017-01-27  Alexis Deruell  <alexis.deruelle@gmail.com>
+
+	PR 21056
+	* testsuite/gas/tic6x/insns16-parallel.s: New test case.
+	* testsuite/gas/tic6x/insns16-parallel.d: New test driver.
+
 2017-01-25  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
 	* configure.tgt (aarch64*-*-rtems*): Remove.
diff --git a/gas/testsuite/gas/tic6x/insns16-parallel.d b/gas/testsuite/gas/tic6x/insns16-parallel.d
new file mode 100644
index 0000000..56a2829
--- /dev/null
+++ b/gas/testsuite/gas/tic6x/insns16-parallel.d
@@ -0,0 +1,43 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name:
+#as: -march=c64x+ -mlittle-endian
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section .text:
+[ \t]*\.\.\.
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008001[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+\|\|[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 8c6e[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 8c6e[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> e8002000[ \t]+<fetch packet header 0xe8002000>
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+\|\|[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008001[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> e0000000[ \t]+<fetch packet header 0xe0000000>
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+\|\|[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
+[ \t]*\.\.\.
diff --git a/gas/testsuite/gas/tic6x/insns16-parallel.s b/gas/testsuite/gas/tic6x/insns16-parallel.s
new file mode 100644
index 0000000..06897b1
--- /dev/null
+++ b/gas/testsuite/gas/tic6x/insns16-parallel.s
@@ -0,0 +1,42 @@
+       .text
+        nop
+        .align 16
+        nop
+        .align 16
+FP0:
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008001
+FP1:
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.short 0x8c6e
+	.short 0x8c6e
+	.word 0xe8002000
+FP2:
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008001
+	.word 0xe0000000
+FP3:
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
+	.word 0x00008000
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 270bcda..3070ad5 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,10 @@
+2017-01-27  Alexis Deruell  <alexis.deruelle@gmail.com>
+
+	PR 21056
+	* tic6x-dis.c (print_insn_tic6x): Correct displaying of parallel
+	instructions when the previous fetch packet ends with a 32-bit
+	instruction.
+
 2017-01-24  Dimitar Dimitrov  <dimitar@dinux.eu>
 
         * pru-opc.c: Remove vague reference to a future GDB port.
diff --git a/opcodes/tic6x-dis.c b/opcodes/tic6x-dis.c
index d94d662..1a6f575 100644
--- a/opcodes/tic6x-dis.c
+++ b/opcodes/tic6x-dis.c
@@ -510,8 +510,17 @@ print_insn_tic6x (bfd_vma addr, struct disassemble_info *info)
 
 	      prev_header_based
 		= tic6x_check_fetch_packet_header (fp_prev, &prev_header, info);
-	      if (prev_header_based && prev_header.word_compact[6])
-		p_bit = prev_header.p_bits[13];
+	      if (prev_header_based)
+		{
+		  if (prev_header.word_compact[6])
+		    p_bit = prev_header.p_bits[13];
+		  else
+		    {
+		      unsigned int prev_opcode = tic6x_extract_32 (fp_prev + 24,
+								   info);
+		      p_bit = (prev_opcode & 0x1) ? TRUE : FALSE;
+		    }
+		}
 	      else
 		{
 		  unsigned int prev_opcode = tic6x_extract_32 (fp_prev + 28,


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]