OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [start/] [gdb-5.0/] [opcodes/] [disassemble.c] - Diff between revs 579 and 1765

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 579 Rev 1765
/* Select disassembly routine for specified architecture.
/* Select disassembly routine for specified architecture.
   Copyright (C) 1994, 95, 96, 97, 98, 99, 2000
   Copyright (C) 1994, 95, 96, 97, 98, 99, 2000
   Free Software Foundation, Inc.
   Free Software Foundation, Inc.
 
 
This program is free software; you can redistribute it and/or modify
This program 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 2 of the License, or
(at your option) any later version.
(at your option) any later version.
 
 
This program is distributed in the hope that it will be useful,
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
GNU General Public License for more details.
 
 
You should have received a copy of the GNU General Public License
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 
#include "ansidecl.h"
#include "ansidecl.h"
#include "dis-asm.h"
#include "dis-asm.h"
 
 
#ifdef ARCH_all
#ifdef ARCH_all
#define ARCH_or32
#define ARCH_or32
#define ARCH_or16
#define ARCH_or16
#define ARCH_a29k
#define ARCH_a29k
#define ARCH_alpha
#define ARCH_alpha
#define ARCH_arc
#define ARCH_arc
#define ARCH_arm
#define ARCH_arm
#define ARCH_avr
#define ARCH_avr
#define ARCH_d10v
#define ARCH_d10v
#define ARCH_d30v
#define ARCH_d30v
#define ARCH_h8300
#define ARCH_h8300
#define ARCH_h8500
#define ARCH_h8500
#define ARCH_hppa
#define ARCH_hppa
#define ARCH_i370
#define ARCH_i370
#define ARCH_i386
#define ARCH_i386
#define ARCH_i960
#define ARCH_i960
#define ARCH_fr30
#define ARCH_fr30
#define ARCH_m32r
#define ARCH_m32r
#define ARCH_m68k
#define ARCH_m68k
#define ARCH_m88k
#define ARCH_m88k
#define ARCH_mcore
#define ARCH_mcore
#define ARCH_mips
#define ARCH_mips
#define ARCH_mn10200
#define ARCH_mn10200
#define ARCH_mn10300
#define ARCH_mn10300
#define ARCH_ns32k
#define ARCH_ns32k
#define ARCH_pj
#define ARCH_pj
#define ARCH_powerpc
#define ARCH_powerpc
#define ARCH_rs6000
#define ARCH_rs6000
#define ARCH_sh
#define ARCH_sh
#define ARCH_sparc
#define ARCH_sparc
#define ARCH_tic30
#define ARCH_tic30
#define ARCH_tic80
#define ARCH_tic80
#define ARCH_v850
#define ARCH_v850
#define ARCH_vax
#define ARCH_vax
#define ARCH_w65
#define ARCH_w65
#define ARCH_z8k
#define ARCH_z8k
#endif
#endif
 
 
 
 
disassembler_ftype
disassembler_ftype
disassembler (abfd)
disassembler (abfd)
     bfd *abfd;
     bfd *abfd;
{
{
  enum bfd_architecture a = bfd_get_arch (abfd);
  enum bfd_architecture a = bfd_get_arch (abfd);
  disassembler_ftype disassemble;
  disassembler_ftype disassemble;
 
 
  switch (a)
  switch (a)
    {
    {
      /* If you add a case to this table, also add it to the
      /* If you add a case to this table, also add it to the
         ARCH_all definition right above this function.  */
         ARCH_all definition right above this function.  */
#ifdef ARCH_a29k
#ifdef ARCH_a29k
    case bfd_arch_a29k:
    case bfd_arch_a29k:
      /* As far as I know we only handle big-endian 29k objects.  */
      /* As far as I know we only handle big-endian 29k objects.  */
      disassemble = print_insn_big_a29k;
      disassemble = print_insn_big_a29k;
      break;
      break;
#endif
#endif
#ifdef ARCH_alpha
#ifdef ARCH_alpha
    case bfd_arch_alpha:
    case bfd_arch_alpha:
      disassemble = print_insn_alpha;
      disassemble = print_insn_alpha;
      break;
      break;
#endif
#endif
#ifdef ARCH_arc
#ifdef ARCH_arc
    case bfd_arch_arc:
    case bfd_arch_arc:
      {
      {
        disassemble = arc_get_disassembler (bfd_get_mach (abfd),
        disassemble = arc_get_disassembler (bfd_get_mach (abfd),
                                            bfd_big_endian (abfd));
                                            bfd_big_endian (abfd));
        break;
        break;
      }
      }
#endif
#endif
#ifdef ARCH_arm
#ifdef ARCH_arm
    case bfd_arch_arm:
    case bfd_arch_arm:
      if (bfd_big_endian (abfd))
      if (bfd_big_endian (abfd))
        disassemble = print_insn_big_arm;
        disassemble = print_insn_big_arm;
      else
      else
        disassemble = print_insn_little_arm;
        disassemble = print_insn_little_arm;
      break;
      break;
#endif
#endif
#ifdef ARCH_avr
#ifdef ARCH_avr
    case bfd_arch_avr:
    case bfd_arch_avr:
      disassemble = print_insn_avr;
      disassemble = print_insn_avr;
      break;
      break;
#endif
#endif
#ifdef ARCH_d10v
#ifdef ARCH_d10v
    case bfd_arch_d10v:
    case bfd_arch_d10v:
      disassemble = print_insn_d10v;
      disassemble = print_insn_d10v;
      break;
      break;
#endif
#endif
#ifdef ARCH_d30v
#ifdef ARCH_d30v
    case bfd_arch_d30v:
    case bfd_arch_d30v:
      disassemble = print_insn_d30v;
      disassemble = print_insn_d30v;
      break;
      break;
#endif
#endif
#ifdef ARCH_h8300
#ifdef ARCH_h8300
    case bfd_arch_h8300:
    case bfd_arch_h8300:
      if (bfd_get_mach(abfd) == bfd_mach_h8300h)
      if (bfd_get_mach(abfd) == bfd_mach_h8300h)
        disassemble = print_insn_h8300h;
        disassemble = print_insn_h8300h;
      else if (bfd_get_mach(abfd) == bfd_mach_h8300s)
      else if (bfd_get_mach(abfd) == bfd_mach_h8300s)
        disassemble = print_insn_h8300s;
        disassemble = print_insn_h8300s;
      else
      else
        disassemble = print_insn_h8300;
        disassemble = print_insn_h8300;
      break;
      break;
#endif
#endif
#ifdef ARCH_h8500
#ifdef ARCH_h8500
    case bfd_arch_h8500:
    case bfd_arch_h8500:
      disassemble = print_insn_h8500;
      disassemble = print_insn_h8500;
      break;
      break;
#endif
#endif
#ifdef ARCH_hppa
#ifdef ARCH_hppa
    case bfd_arch_hppa:
    case bfd_arch_hppa:
      disassemble = print_insn_hppa;
      disassemble = print_insn_hppa;
      break;
      break;
#endif
#endif
#ifdef ARCH_i370
#ifdef ARCH_i370
    case bfd_arch_i370:
    case bfd_arch_i370:
      disassemble = print_insn_i370;
      disassemble = print_insn_i370;
      break;
      break;
#endif
#endif
#ifdef ARCH_i386
#ifdef ARCH_i386
    case bfd_arch_i386:
    case bfd_arch_i386:
      if (bfd_get_mach (abfd) == bfd_mach_i386_i386_intel_syntax)
      if (bfd_get_mach (abfd) == bfd_mach_i386_i386_intel_syntax)
        disassemble = print_insn_i386_intel;
        disassemble = print_insn_i386_intel;
      else
      else
        disassemble = print_insn_i386_att;
        disassemble = print_insn_i386_att;
      break;
      break;
#endif
#endif
#ifdef ARCH_i960
#ifdef ARCH_i960
    case bfd_arch_i960:
    case bfd_arch_i960:
      disassemble = print_insn_i960;
      disassemble = print_insn_i960;
      break;
      break;
#endif
#endif
#ifdef ARCH_fr30
#ifdef ARCH_fr30
    case bfd_arch_fr30:
    case bfd_arch_fr30:
      disassemble = print_insn_fr30;
      disassemble = print_insn_fr30;
      break;
      break;
#endif
#endif
#ifdef ARCH_m32r
#ifdef ARCH_m32r
    case bfd_arch_m32r:
    case bfd_arch_m32r:
      disassemble = print_insn_m32r;
      disassemble = print_insn_m32r;
      break;
      break;
#endif
#endif
#ifdef ARCH_m68k
#ifdef ARCH_m68k
    case bfd_arch_m68k:
    case bfd_arch_m68k:
      disassemble = print_insn_m68k;
      disassemble = print_insn_m68k;
      break;
      break;
#endif
#endif
#ifdef ARCH_m88k
#ifdef ARCH_m88k
    case bfd_arch_m88k:
    case bfd_arch_m88k:
      disassemble = print_insn_m88k;
      disassemble = print_insn_m88k;
      break;
      break;
#endif
#endif
#ifdef ARCH_ns32k
#ifdef ARCH_ns32k
    case bfd_arch_ns32k:
    case bfd_arch_ns32k:
      disassemble = print_insn_ns32k;
      disassemble = print_insn_ns32k;
      break;
      break;
#endif
#endif
#ifdef ARCH_mcore
#ifdef ARCH_mcore
    case bfd_arch_mcore:
    case bfd_arch_mcore:
      disassemble = print_insn_mcore;
      disassemble = print_insn_mcore;
      break;
      break;
#endif
#endif
#ifdef ARCH_mips
#ifdef ARCH_mips
    case bfd_arch_mips:
    case bfd_arch_mips:
      if (bfd_big_endian (abfd))
      if (bfd_big_endian (abfd))
        disassemble = print_insn_big_mips;
        disassemble = print_insn_big_mips;
      else
      else
        disassemble = print_insn_little_mips;
        disassemble = print_insn_little_mips;
      break;
      break;
#endif
#endif
#ifdef ARCH_mn10200
#ifdef ARCH_mn10200
    case bfd_arch_mn10200:
    case bfd_arch_mn10200:
      disassemble = print_insn_mn10200;
      disassemble = print_insn_mn10200;
      break;
      break;
#endif
#endif
#ifdef ARCH_mn10300
#ifdef ARCH_mn10300
    case bfd_arch_mn10300:
    case bfd_arch_mn10300:
      disassemble = print_insn_mn10300;
      disassemble = print_insn_mn10300;
      break;
      break;
#endif
#endif
#ifdef ARCH_or1k
#ifdef ARCH_or1k
    case bfd_arch_or1k:
    case bfd_arch_or1k:
      if (bfd_big_endian (abfd))
      if (bfd_big_endian (abfd))
        disassemble = print_insn_big_or1k;
        disassemble = print_insn_big_or1k;
      else
      else
        disassemble = print_insn_little_or1k;
        disassemble = print_insn_little_or1k;
      break;
      break;
#endif
#endif
#ifdef ARCH_or32
#ifdef ARCH_or32
    case bfd_arch_or32:
    case bfd_arch_or32:
      if (bfd_big_endian (abfd))
      if (bfd_big_endian (abfd))
        disassemble = print_insn_big_or32;
        disassemble = print_insn_big_or32;
      else
      else
        disassemble = print_insn_little_or32;
        disassemble = print_insn_little_or32;
      break;
      break;
#endif
#endif
#ifdef ARCH_or16
#ifdef ARCH_or16
    case bfd_arch_or16:
    case bfd_arch_or16:
      if (bfd_big_endian (abfd))
      if (bfd_big_endian (abfd))
        disassemble = print_insn_big_or16;
        disassemble = print_insn_big_or16;
      else
      else
        disassemble = print_insn_little_or16;
        disassemble = print_insn_little_or16;
      break;
      break;
#endif
#endif
#ifdef ARCH_pj
#ifdef ARCH_pj
    case bfd_arch_pj:
    case bfd_arch_pj:
      disassemble = print_insn_pj;
      disassemble = print_insn_pj;
      break;
      break;
#endif
#endif
#ifdef ARCH_powerpc
#ifdef ARCH_powerpc
    case bfd_arch_powerpc:
    case bfd_arch_powerpc:
      if (bfd_big_endian (abfd))
      if (bfd_big_endian (abfd))
        disassemble = print_insn_big_powerpc;
        disassemble = print_insn_big_powerpc;
      else
      else
        disassemble = print_insn_little_powerpc;
        disassemble = print_insn_little_powerpc;
      break;
      break;
#endif
#endif
#ifdef ARCH_rs6000
#ifdef ARCH_rs6000
    case bfd_arch_rs6000:
    case bfd_arch_rs6000:
      disassemble = print_insn_rs6000;
      disassemble = print_insn_rs6000;
      break;
      break;
#endif
#endif
#ifdef ARCH_sh
#ifdef ARCH_sh
    case bfd_arch_sh:
    case bfd_arch_sh:
      if (bfd_big_endian (abfd))
      if (bfd_big_endian (abfd))
        disassemble = print_insn_sh;
        disassemble = print_insn_sh;
      else
      else
        disassemble = print_insn_shl;
        disassemble = print_insn_shl;
      break;
      break;
#endif
#endif
#ifdef ARCH_sparc
#ifdef ARCH_sparc
    case bfd_arch_sparc:
    case bfd_arch_sparc:
      disassemble = print_insn_sparc;
      disassemble = print_insn_sparc;
      break;
      break;
#endif
#endif
#ifdef ARCH_tic30
#ifdef ARCH_tic30
    case bfd_arch_tic30:
    case bfd_arch_tic30:
      disassemble = print_insn_tic30;
      disassemble = print_insn_tic30;
      break;
      break;
#endif
#endif
#ifdef ARCH_tic80
#ifdef ARCH_tic80
    case bfd_arch_tic80:
    case bfd_arch_tic80:
      disassemble = print_insn_tic80;
      disassemble = print_insn_tic80;
      break;
      break;
#endif
#endif
#ifdef ARCH_v850
#ifdef ARCH_v850
    case bfd_arch_v850:
    case bfd_arch_v850:
      disassemble = print_insn_v850;
      disassemble = print_insn_v850;
      break;
      break;
#endif
#endif
#ifdef ARCH_w65
#ifdef ARCH_w65
    case bfd_arch_w65:
    case bfd_arch_w65:
      disassemble = print_insn_w65;
      disassemble = print_insn_w65;
      break;
      break;
#endif
#endif
#ifdef ARCH_z8k
#ifdef ARCH_z8k
    case bfd_arch_z8k:
    case bfd_arch_z8k:
      if (bfd_get_mach(abfd) == bfd_mach_z8001)
      if (bfd_get_mach(abfd) == bfd_mach_z8001)
        disassemble = print_insn_z8001;
        disassemble = print_insn_z8001;
      else
      else
        disassemble = print_insn_z8002;
        disassemble = print_insn_z8002;
      break;
      break;
#endif
#endif
#ifdef ARCH_vax
#ifdef ARCH_vax
    case bfd_arch_vax:
    case bfd_arch_vax:
      disassemble = print_insn_vax;
      disassemble = print_insn_vax;
      break;
      break;
#endif
#endif
    default:
    default:
      return 0;
      return 0;
    }
    }
  return disassemble;
  return disassemble;
}
}
 
 
void
void
disassembler_usage (stream)
disassembler_usage (stream)
     FILE *stream ATTRIBUTE_UNUSED;
     FILE *stream ATTRIBUTE_UNUSED;
{
{
#ifdef ARCH_arm
#ifdef ARCH_arm
  print_arm_disassembler_options (stream);
  print_arm_disassembler_options (stream);
#endif
#endif
 
 
  return;
  return;
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.