aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/ChangeLog5
-rw-r--r--include/dis-asm.h1
-rw-r--r--opcodes/ChangeLog7
-rw-r--r--opcodes/disassemble.c3
-rw-r--r--opcodes/s390-dis.c48
5 files changed, 55 insertions, 9 deletions
diff --git a/include/ChangeLog b/include/ChangeLog
index 749e8e9..792ae80 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -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.
diff --git a/include/dis-asm.h b/include/dis-asm.h
index 40afe17..999d6ea 100644
--- a/include/dis-asm.h
+++ b/include/dis-asm.h
@@ -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 **);
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 456d588..e84536a 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,12 @@
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
of local variables used for mnemonic parsing: prefix, suffix and
number.
diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c
index 66850a7..8e068cdb 100644
--- a/opcodes/disassemble.c
+++ b/opcodes/disassemble.c
@@ -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;
}
diff --git a/opcodes/s390-dis.c b/opcodes/s390-dis.c
index df1f450..bf0ae0f 100644
--- a/opcodes/s390-dis.c
+++ b/opcodes/s390-dis.c
@@ -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"));
+}