bug-gnu-utils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Fix for Thumb BLX instruction - addendum


From: Nick Clifton
Subject: Fix for Thumb BLX instruction - addendum
Date: 23 May 2002 13:50:08 +0100

Hi Guys,

  I forgot to include the patch for the disassembler.  Sorry!

Cheers
        Nick

2002-05-23  Nick Clifton  <address@hidden>

        * arm-dis.c (print_insn_thumb): Fix handling of BLX instruction to
        conform to Operations definition in the ARM ARM.

Index: opcodes/arm-dis.c
===================================================================
RCS file: /cvs/src/src/opcodes/arm-dis.c,v
retrieving revision 1.27
diff -c -3 -p -w -r1.27 arm-dis.c
*** opcodes/arm-dis.c   19 Jan 2002 12:27:24 -0000      1.27
--- opcodes/arm-dis.c   23 May 2002 12:45:36 -0000
*************** print_insn_thumb (pc, info, given)
*** 765,790 ****
              info->bytes_per_line  = 4;
  
              offset = BDISP23 (given);
              
              if ((given & 0x10000000) == 0)
                {
                  func (stream, "blx\t");
! 
!                 /* The spec says that bit 1 of the branch's destination
!                    address comes from bit 1 of the instruction's
!                    address and not from the offset in the instruction.  */
!                 if (offset & 0x1)
!                   {
!                     /* func (stream, "*malformed!* "); */
!                     offset &= ~ 0x1;
!                   }
! 
!                 offset |= ((pc & 0x2) >> 1);
                }
              else
                func (stream, "bl\t");
  
!             info->print_address_func (offset * 2 + pc + 4, info);
                return 4;
              }
            else
--- 765,781 ----
              info->bytes_per_line  = 4;
  
              offset = BDISP23 (given);
+             offset = offset * 2 + pc + 4;
  
              if ((given & 0x10000000) == 0)
                {
                  func (stream, "blx\t");
!                 offset &= 0xfffffffc;
                }
              else
                func (stream, "bl\t");
  
!             info->print_address_func (offset, info);
                return 4;
              }
            else




reply via email to

[Prev in Thread] Current Thread [Next in Thread]