* readelf.c (do_archive_index): New.
[deliverable/binutils-gdb.git] / opcodes / disassemble.c
index fb38f43d249e1898fe370495bf0cdc0490e8af67..66850a71e737eaf10df38ba605b07c1016865bf5 100644 (file)
@@ -1,10 +1,12 @@
 /* Select disassembly routine for specified architecture.
    Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
 /* Select disassembly routine for specified architecture.
    Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005 Free Software Foundation, Inc.
+   2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 
-   This program is free software; you can redistribute it and/or modify
+   This file is part of the GNU opcodes library.
+
+   This library is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
 
 #include "sysdep.h"
 #include "dis-asm.h"
 
 #ifdef ARCH_all
 
 #include "sysdep.h"
 #include "dis-asm.h"
 
 #ifdef ARCH_all
-#define ARCH_a29k
 #define ARCH_alpha
 #define ARCH_arc
 #define ARCH_arm
 #define ARCH_avr
 #define ARCH_alpha
 #define ARCH_arc
 #define ARCH_arm
 #define ARCH_avr
+#define ARCH_bfin
+#define ARCH_cr16
 #define ARCH_cris
 #define ARCH_crx
 #define ARCH_d10v
 #define ARCH_d30v
 #define ARCH_dlx
 #define ARCH_cris
 #define ARCH_crx
 #define ARCH_d10v
 #define ARCH_d30v
 #define ARCH_dlx
+#define ARCH_fr30
+#define ARCH_frv
 #define ARCH_h8300
 #define ARCH_h8500
 #define ARCH_hppa
 #define ARCH_h8300
 #define ARCH_h8500
 #define ARCH_hppa
 #define ARCH_i386
 #define ARCH_i860
 #define ARCH_i960
 #define ARCH_i386
 #define ARCH_i860
 #define ARCH_i960
-#define ARCH_ip2k
 #define ARCH_ia64
 #define ARCH_ia64
-#define ARCH_fr30
+#define ARCH_ip2k
+#define ARCH_iq2000
+#define ARCH_m32c
 #define ARCH_m32r
 #define ARCH_m32r
-#define ARCH_m68k
 #define ARCH_m68hc11
 #define ARCH_m68hc12
 #define ARCH_m68hc11
 #define ARCH_m68hc12
+#define ARCH_m68k
 #define ARCH_m88k
 #define ARCH_maxq
 #define ARCH_mcore
 #define ARCH_m88k
 #define ARCH_maxq
 #define ARCH_mcore
+#define ARCH_mep
 #define ARCH_mips
 #define ARCH_mmix
 #define ARCH_mn10200
 #define ARCH_mn10300
 #define ARCH_mips
 #define ARCH_mmix
 #define ARCH_mn10200
 #define ARCH_mn10300
+#define ARCH_mt
 #define ARCH_msp430
 #define ARCH_ns32k
 #define ARCH_openrisc
 #define ARCH_msp430
 #define ARCH_ns32k
 #define ARCH_openrisc
 #define ARCH_powerpc
 #define ARCH_rs6000
 #define ARCH_s390
 #define ARCH_powerpc
 #define ARCH_rs6000
 #define ARCH_s390
+#define ARCH_score
 #define ARCH_sh
 #define ARCH_sparc
 #define ARCH_sh
 #define ARCH_sparc
+#define ARCH_spu
 #define ARCH_tic30
 #define ARCH_tic4x
 #define ARCH_tic54x
 #define ARCH_tic30
 #define ARCH_tic4x
 #define ARCH_tic54x
 #define ARCH_vax
 #define ARCH_w65
 #define ARCH_xstormy16
 #define ARCH_vax
 #define ARCH_w65
 #define ARCH_xstormy16
+#define ARCH_xc16x
 #define ARCH_xtensa
 #define ARCH_xtensa
+#define ARCH_z80
 #define ARCH_z8k
 #define ARCH_z8k
-#define ARCH_frv
-#define ARCH_iq2000
 #define INCLUDE_SHMEDIA
 #endif
 
 #define INCLUDE_SHMEDIA
 #endif
 
+#ifdef ARCH_m32c
+#include "m32c-desc.h"
+#endif
 
 disassembler_ftype
 disassembler (abfd)
 
 disassembler_ftype
 disassembler (abfd)
@@ -89,12 +103,6 @@ disassembler (abfd)
     {
       /* If you add a case to this table, also add it to the
         ARCH_all definition right above this function.  */
     {
       /* If you add a case to this table, also add it to the
         ARCH_all definition right above this function.  */
-#ifdef ARCH_a29k
-    case bfd_arch_a29k:
-      /* As far as I know we only handle big-endian 29k objects.  */
-      disassemble = print_insn_big_a29k;
-      break;
-#endif
 #ifdef ARCH_alpha
     case bfd_arch_alpha:
       disassemble = print_insn_alpha;
 #ifdef ARCH_alpha
     case bfd_arch_alpha:
       disassemble = print_insn_alpha;
@@ -120,6 +128,16 @@ disassembler (abfd)
       disassemble = print_insn_avr;
       break;
 #endif
       disassemble = print_insn_avr;
       break;
 #endif
+#ifdef ARCH_bfin
+    case bfd_arch_bfin:
+      disassemble = print_insn_bfin;
+      break;
+#endif
+#ifdef ARCH_cr16
+    case bfd_arch_cr16:
+      disassemble = print_insn_cr16;
+      break;
+#endif
 #ifdef ARCH_cris
     case bfd_arch_cris:
       disassemble = cris_get_disassembler (abfd);
 #ifdef ARCH_cris
     case bfd_arch_cris:
       disassemble = cris_get_disassembler (abfd);
@@ -233,6 +251,11 @@ disassembler (abfd)
       disassemble = print_insn_maxq_little;
       break;
 #endif
       disassemble = print_insn_maxq_little;
       break;
 #endif
+#ifdef ARCH_mt
+    case bfd_arch_mt:
+      disassemble = print_insn_mt;
+      break;
+#endif
 #ifdef ARCH_msp430
     case bfd_arch_msp430:
       disassemble = print_insn_msp430;
 #ifdef ARCH_msp430
     case bfd_arch_msp430:
       disassemble = print_insn_msp430;
@@ -248,6 +271,11 @@ disassembler (abfd)
       disassemble = print_insn_mcore;
       break;
 #endif
       disassemble = print_insn_mcore;
       break;
 #endif
+#ifdef ARCH_mep
+    case bfd_arch_mep:
+      disassemble = print_insn_mep;
+      break;
+#endif
 #ifdef ARCH_mips
     case bfd_arch_mips:
       if (bfd_big_endian (abfd))
 #ifdef ARCH_mips
     case bfd_arch_mips:
       if (bfd_big_endian (abfd))
@@ -315,6 +343,14 @@ disassembler (abfd)
       disassemble = print_insn_s390;
       break;
 #endif
       disassemble = print_insn_s390;
       break;
 #endif
+#ifdef ARCH_score
+    case bfd_arch_score:
+      if (bfd_big_endian (abfd))
+        disassemble = print_insn_big_score;      
+      else
+        disassemble = print_insn_little_score; 
+     break;
+#endif
 #ifdef ARCH_sh
     case bfd_arch_sh:
       disassemble = print_insn_sh;
 #ifdef ARCH_sh
     case bfd_arch_sh:
       disassemble = print_insn_sh;
@@ -325,6 +361,11 @@ disassembler (abfd)
       disassemble = print_insn_sparc;
       break;
 #endif
       disassemble = print_insn_sparc;
       break;
 #endif
+#ifdef ARCH_spu
+    case bfd_arch_spu:
+      disassemble = print_insn_spu;
+      break;
+#endif
 #ifdef ARCH_tic30
     case bfd_arch_tic30:
       disassemble = print_insn_tic30;
 #ifdef ARCH_tic30
     case bfd_arch_tic30:
       disassemble = print_insn_tic30;
@@ -360,11 +401,21 @@ disassembler (abfd)
       disassemble = print_insn_xstormy16;
       break;
 #endif
       disassemble = print_insn_xstormy16;
       break;
 #endif
+#ifdef ARCH_xc16x
+    case bfd_arch_xc16x:
+      disassemble = print_insn_xc16x;
+      break;
+#endif
 #ifdef ARCH_xtensa
     case bfd_arch_xtensa:
       disassemble = print_insn_xtensa;
       break;
 #endif
 #ifdef ARCH_xtensa
     case bfd_arch_xtensa:
       disassemble = print_insn_xtensa;
       break;
 #endif
+#ifdef ARCH_z80
+    case bfd_arch_z80:
+      disassemble = print_insn_z80;
+      break;
+#endif
 #ifdef ARCH_z8k
     case bfd_arch_z8k:
       if (bfd_get_mach(abfd) == bfd_mach_z8001)
 #ifdef ARCH_z8k
     case bfd_arch_z8k:
       if (bfd_get_mach(abfd) == bfd_mach_z8001)
@@ -387,6 +438,11 @@ disassembler (abfd)
     case bfd_arch_iq2000:
       disassemble = print_insn_iq2000;
       break;
     case bfd_arch_iq2000:
       disassemble = print_insn_iq2000;
       break;
+#endif
+#ifdef ARCH_m32c
+    case bfd_arch_m32c:
+      disassemble = print_insn_m32c;
+      break;
 #endif
     default:
       return 0;
 #endif
     default:
       return 0;
@@ -407,6 +463,9 @@ disassembler_usage (stream)
 #ifdef ARCH_powerpc
   print_ppc_disassembler_options (stream);
 #endif
 #ifdef ARCH_powerpc
   print_ppc_disassembler_options (stream);
 #endif
+#ifdef ARCH_i386
+  print_i386_disassembler_options (stream);
+#endif
 
   return;
 }
 
   return;
 }
@@ -422,6 +481,7 @@ disassemble_init_for_target (struct disassemble_info * info)
 #ifdef ARCH_arm
     case bfd_arch_arm:
       info->symbol_is_valid = arm_symbol_is_valid;
 #ifdef ARCH_arm
     case bfd_arch_arm:
       info->symbol_is_valid = arm_symbol_is_valid;
+      info->disassembler_needs_relocs = TRUE;
       break;
 #endif
 #ifdef ARCH_ia64
       break;
 #endif
 #ifdef ARCH_ia64
@@ -432,6 +492,26 @@ disassemble_init_for_target (struct disassemble_info * info)
 #ifdef ARCH_tic4x
     case bfd_arch_tic4x:
       info->skip_zeroes = 32;
 #ifdef ARCH_tic4x
     case bfd_arch_tic4x:
       info->skip_zeroes = 32;
+      break;
+#endif
+#ifdef ARCH_mep
+    case bfd_arch_mep:
+      info->skip_zeroes = 256;
+      info->skip_zeroes_at_end = 0;
+      break;
+#endif
+#ifdef ARCH_m32c
+    case bfd_arch_m32c:
+      info->endian = BFD_ENDIAN_BIG;
+      if (! info->insn_sets)
+       {
+         info->insn_sets = cgen_bitset_create (ISA_MAX);
+         if (info->mach == bfd_mach_m16c)
+           cgen_bitset_set (info->insn_sets, ISA_M16C);
+         else
+           cgen_bitset_set (info->insn_sets, ISA_M32C);
+       }
+      break;
 #endif
     default:
       break;
 #endif
     default:
       break;
This page took 0.027343 seconds and 4 git commands to generate.