From 112b7c5071b75bffeae19c11ca923e700cf36e16 Mon Sep 17 00:00:00 2001 From: Andreas Krebbel Date: Thu, 10 Apr 2008 13:36:43 +0000 Subject: [PATCH] 2008-04-10 Andreas Krebbel * 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 * dis-asm.h (print_s390_disassembler_options): Prototype added. --- include/ChangeLog | 5 +++++ include/dis-asm.h | 1 + opcodes/ChangeLog | 7 +++++++ opcodes/disassemble.c | 3 +++ opcodes/s390-dis.c | 48 +++++++++++++++++++++++++++++++++++-------- 5 files changed, 55 insertions(+), 9 deletions(-) diff --git a/include/ChangeLog b/include/ChangeLog index 749e8e9d7b..792ae80852 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,8 @@ +2008-04-10 Andreas Krebbel + + * dis-asm.h (print_s390_disassembler_options): + Prototype added. + 2008-03-28 Eric B. Weddington * 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 40afe17cfd..999d6eaf20 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 456d5884ec..e84536abdc 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,10 @@ +2008-04-10 Andreas Krebbel + + * 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 * s390-mkopc.c (insertExpandedMnemonic): Expand string sizes diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c index 66850a71e7..8e068cdbb0 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 df1f450d29..bf0ae0fb20 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")); +} -- 2.34.1