]> oss.titaniummirror.com Git - msp430-binutils.git/blobdiff - opcodes/s390-dis.c
Merge commit 'upstream/2.20'
[msp430-binutils.git] / opcodes / s390-dis.c
index df1f450d29bbc655c7ef5c216acb498c77521869..e4e9cad05cebdbfd98cec2f87924c1c315158dd3 100644 (file)
@@ -1,5 +1,6 @@
 /* s390-dis.c -- Disassemble S390 instructions
-   Copyright 2000, 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
+   Copyright 2000, 2001, 2002, 2003, 2005, 2007, 2008
+   Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
 
    This file is part of the GNU opcodes library.
@@ -23,6 +24,7 @@
 #include "ansidecl.h"
 #include "sysdep.h"
 #include "dis-asm.h"
+#include "opintl.h"
 #include "opcode/s390.h"
 
 static int init_flag = 0;
@@ -36,6 +38,7 @@ init_disasm (struct disassemble_info *info)
 {
   const struct s390_opcode *opcode;
   const struct s390_opcode *opcode_end;
+  const char *p;
 
   memset (opc_index, 0, sizeof (opc_index));
   opcode_end = s390_opcodes + s390_num_opcodes;
@@ -46,17 +49,34 @@ init_disasm (struct disassemble_info *info)
             (opcode[1].opcode[0] == opcode->opcode[0]))
        opcode++;
     }
-  switch (info->mach)
+
+  for (p = info->disassembler_options; p != NULL; )
     {
-    case bfd_mach_s390_31:
-      current_arch_mask = 1 << S390_OPCODE_ESA;
-      break;
-    case bfd_mach_s390_64:
-      current_arch_mask = 1 << S390_OPCODE_ZARCH;
-      break;
-    default:
-      abort ();
+      if (CONST_STRNEQ (p, "esa"))
+       current_arch_mask = 1 << S390_OPCODE_ESA;
+      else if (CONST_STRNEQ (p, "zarch"))
+       current_arch_mask = 1 << S390_OPCODE_ZARCH;
+      else
+       fprintf (stderr, "Unknown S/390 disassembler option: %s\n", p);
+
+      p = strchr (p, ',');
+      if (p != NULL)
+       p++;
     }
+
+  if (!current_arch_mask)
+    switch (info->mach)
+      {
+      case bfd_mach_s390_31:
+       current_arch_mask = 1 << S390_OPCODE_ESA;
+       break;
+      case bfd_mach_s390_64:
+       current_arch_mask = 1 << S390_OPCODE_ZARCH;
+       break;
+      default:
+       abort ();
+      }
+
   init_flag = 1;
 }
 
@@ -250,3 +270,14 @@ print_insn_s390 (bfd_vma memaddr, struct disassemble_info *info)
       return 1;
     }
 }
+
+void
+print_s390_disassembler_options (FILE *stream)
+{
+  fprintf (stream, _("\n\
+The following S/390 specific disassembler options are supported for use\n\
+with the -M switch (multiple options should be separated by commas):\n"));
+
+  fprintf (stream, _("  esa         Disassemble in ESA architecture mode\n"));
+  fprintf (stream, _("  zarch       Disassemble in z/Architecture mode\n"));
+}