2008-04-10 Andreas Krebbel <krebbel1@de.ibm.com>
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>
Thu, 10 Apr 2008 13:36:43 +0000 (13:36 +0000)
committerAndreas Krebbel <Andreas.Krebbel@de.ibm.com>
Thu, 10 Apr 2008 13:36:43 +0000 (13:36 +0000)
* s390-dis.c (init_disasm): Evaluate disassembler_options.
(print_s390_disassembler_options): New function.
* disassemble.c (disassembler_usage): Invoke
print_s390_disassembler_options.

2008-04-10  Andreas Krebbel  <krebbel1@de.ibm.com>

* dis-asm.h (print_s390_disassembler_options):
Prototype added.

include/ChangeLog
include/dis-asm.h
opcodes/ChangeLog
opcodes/disassemble.c
opcodes/s390-dis.c

index 749e8e9d7b37c8998f318b6b5d84a2aa64b4abd0..792ae808524229951a4b0bc3ed773e7ee4bb6c4d 100644 (file)
@@ -1,3 +1,8 @@
+2008-04-10  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * dis-asm.h (print_s390_disassembler_options):
+       Prototype added.
+
 2008-03-28  Eric B. Weddington  <eric.weddington@atmel.com>
 
        * opcode/avr.h (AVR_ISA_TINY3): Define new opcode set for attiny167.
index 40afe17cfd7b1d4e239f32aa069a3d9723183a76..999d6eaf204e4b05aa49b094bacfe5fbe95cdd97 100644 (file)
@@ -291,6 +291,7 @@ extern void print_mips_disassembler_options (FILE *);
 extern void print_ppc_disassembler_options (FILE *);
 extern void print_arm_disassembler_options (FILE *);
 extern void parse_arm_disassembler_option (char *);
+extern void print_s390_disassembler_options (FILE *);
 extern int  get_arm_regname_num_options (void);
 extern int  set_arm_regname_option (int);
 extern int  get_arm_regnames (int, const char **, const char **, const char *const **);
index 456d5884ec97948d70eaea99c0303b94785072f6..e84536abdc5b2bb161ad1f5801ab0920168222a0 100644 (file)
@@ -1,3 +1,10 @@
+2008-04-10  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * s390-dis.c (init_disasm): Evaluate disassembler_options.
+       (print_s390_disassembler_options): New function.
+       * disassemble.c (disassembler_usage): Invoke
+       print_s390_disassembler_options.
+
 2008-04-10  Andreas Krebbel  <krebbel1@de.ibm.com>
 
        * s390-mkopc.c (insertExpandedMnemonic): Expand string sizes
index 66850a71e737eaf10df38ba605b07c1016865bf5..8e068cdbb0d85d3b54bec59824991b8d5f9a8cf6 100644 (file)
@@ -466,6 +466,9 @@ disassembler_usage (stream)
 #ifdef ARCH_i386
   print_i386_disassembler_options (stream);
 #endif
+#ifdef ARCH_s390
+  print_s390_disassembler_options (stream);
+#endif
 
   return;
 }
index df1f450d29bbc655c7ef5c216acb498c77521869..bf0ae0fb20c7316cb31a12621e6f7da901544c97 100644 (file)
@@ -23,6 +23,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 +37,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 +48,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 +269,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"));
+}