Catch a bug in the msp430 disassembler where an add instruction was confused
authorNick Clifton <nickc@redhat.com>
Fri, 2 Jan 2004 17:26:11 +0000 (17:26 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 2 Jan 2004 17:26:11 +0000 (17:26 +0000)
with an rla instruction.  Add a test for this to the testsuite.

gas/testsuite/ChangeLog
gas/testsuite/gas/msp430/opcode.d
gas/testsuite/gas/msp430/opcode.s
opcodes/ChangeLog
opcodes/msp430-dis.c

index 829c5b8..1c9409d 100644 (file)
@@ -1,3 +1,7 @@
+2004-01-02  Albert Bartoszko  <albar@nt.kegel.com.pl>
+
+       * gas/msp430/opcode.s: Add test for an 'add' instruction which
+       looks similar to an 'rla' instruction.
 
 For older changes see ChangeLog-9303
 \f
index 3f45127..22df51c 100644 (file)
@@ -42,4 +42,4 @@ Disassembly of section .text:
 0+05e <[^>]*> 82 4f 00 00      mov     r15,    &0x0000 ;
 0+062 <[^>]*> 3f 40 f0 00      mov     #240,   r15     ;#0x00f0
 0+066 <[^>]*> 30 40 00 00      br      #0x0000         ;
-
+0+06a <[^>]*> 92 52 00 02 72 01        add     &0x0200,&0x0172 ;0x0200
index 237bd1f..b85a463 100644 (file)
@@ -52,3 +52,6 @@ main:
        .comm c,4,2
        .comm d,4,2
 
+       ;; This next instruction triggered a bug which
+       ;; was fixed by a patch to msp430-dis.c on Jan 2, 2004
+       add     &0x200, &0x172
index eacd265..90c75dc 100644 (file)
@@ -1,3 +1,7 @@
+2004-01-02  Albert Bartoszko  <albar@nt.kegel.com.pl>
+
+       * msp430-dis.c (msp430_doubleoperand): Check for an 'add'
+       instruction which looks similar to an 'rla' instruction.
 
 For older changes see ChangeLog-0203
 \f
index 767ffa4..1b5ffb1 100644 (file)
@@ -1,5 +1,5 @@
 /* Disassemble MSP430 instructions.
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
    
    Contributed by Dmitry Diky <diwil@mail.ru>
         
@@ -491,6 +491,10 @@ msp430_doubleoperand (info, opcode, addr, insn, op1, op2, comm1, comm2, cycles)
            {
              /* Absolute.  */
              dst = msp430dis_opcode (addr + 2, info);
+             /* If the 'src' field is not the same as the dst
+                then this is not an rla instruction.  */
+             if (dst != msp430dis_opcode (addr + 4, info))
+               return 0;
              cmd_len += 4;
              *cycles = 6;
              sprintf (op1, "&0x%04x", PS (dst));