gas: blackfin: test all 16bit insns
[deliverable/binutils-gdb.git] / opcodes / arm-dis.c
index 3dfbf5c5415e7219b4f31a78ff8842f9bbd14304..e8abbf51b1daeb15a654b50922fdf79373830b03 100644 (file)
@@ -1563,7 +1563,7 @@ static const struct opcode32 thumb32_opcodes[] =
   {ARM_EXT_V6T2, 0xf0009000, 0xf800d000, "b%c.w\t%B%x"},
 
   /* These have been 32-bit since the invention of Thumb.  */
-  {ARM_EXT_V4T,  0xf000c000, 0xf800d000, "blx%c\t%B%x"},
+  {ARM_EXT_V4T,  0xf000c000, 0xf800d001, "blx%c\t%B%x"},
   {ARM_EXT_V4T,  0xf000d000, 0xf800d000, "bl%c\t%B%x"},
 
   /* Fallback.  */
@@ -1910,8 +1910,12 @@ print_insn_coprocessor (bfd_vma pc,
                    if (rn == 15 && (PRE_BIT_SET || WRITEBACK_BIT_SET))
                      {
                        func (stream, "\t; ");
-                       info->print_address_func (offset + pc
-                                                 + info->bytes_per_chunk * 2, info);
+                       /* For unaligned PCs, apply off-by-alignment
+                          correction.  */
+                       info->print_address_func (offset + pc 
+                                                 + info->bytes_per_chunk * 2
+                                                 - (pc & 3),
+                                                 info);
                      }
                  }
                  break;
@@ -4521,9 +4525,12 @@ get_sym_code_type (struct disassemble_info *info,
   type = ELF_ST_TYPE (es->internal_elf_sym.st_info);
 
   /* If the symbol has function type then use that.  */
-  if (type == STT_FUNC || type == STT_ARM_TFUNC)
+  if (type == STT_FUNC || type == STT_GNU_IFUNC)
     {
-      *map_type = (type == STT_ARM_TFUNC) ? MAP_THUMB : MAP_ARM;
+      if (ARM_SYM_BRANCH_TYPE (&es->internal_elf_sym) == ST_BRANCH_TO_THUMB)
+       *map_type = MAP_THUMB;
+      else
+       *map_type = MAP_ARM;
       return TRUE;
     }
 
@@ -4803,7 +4810,9 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
          es = *(elf_symbol_type **)(info->symbols);
          type = ELF_ST_TYPE (es->internal_elf_sym.st_info);
 
-         is_thumb = (type == STT_ARM_TFUNC) || (type == STT_ARM_16BIT);
+         is_thumb = ((ARM_SYM_BRANCH_TYPE (&es->internal_elf_sym)
+                      == ST_BRANCH_TO_THUMB)
+                     || type == STT_ARM_16BIT);
        }
     }
 
This page took 0.024772 seconds and 4 git commands to generate.