This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [PATCH] Multi-arch i386 instruction printing
- From: Michal Ludvig <mludvig at suse dot cz>
- To: Mark Kettenis <kettenis at chello dot nl>
- Cc: GDB Patches <gdb-patches at sources dot redhat dot com>
- Date: Mon, 16 Sep 2002 17:26:46 +0200
- Subject: Re: [PATCH] Multi-arch i386 instruction printing
- Organization: SuSE CR
- References: <200209151402.g8FE22B7007402@elgar.kettenis.dyndns.org>
Mark Kettenis wrote:
This patch multi-arch's i386 instruction printing. In doing so I took
a somewhat different approach than what's done for other targets, by
always overriding the disassemble_info fields that the i386
instruction printer cares about.
Seems to work fine, and should also be able to handle x86_64.
Here's the same for x86-64 - just for easier merge when you'll do the
multiarch gdb ;-)
Can I commit it?
Michal Ludvig
--
* SuSE CR, s.r.o * mludvig@suse.cz
* +420 2 9654 5373 * http://www.suse.cz
2002-09-16 Michal Ludvig <mludvig@suse.cz>
* x86-64-tdep.c (gdb_print_insn_x86_64): Removed.
(86_64_print_insn): Added.
(x86_64_gdbarch_init): Set print_insn to i386_print_insns.
(_initialize_x86_64_tdep): Don't initialize tm_print_insn and
tm_print_insn_info.
Index: x86-64-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/x86-64-tdep.c,v
retrieving revision 1.27
diff -u -p -r1.27 x86-64-tdep.c
--- x86-64-tdep.c 12 Sep 2002 08:39:26 -0000 1.27
+++ x86-64-tdep.c 16 Sep 2002 15:19:22 -0000
@@ -820,19 +820,14 @@ x86_64_register_number (const char *name
-/* We have two flavours of disassembly. The machinery on this page
- deals with switching between those. */
-
+/* This is the same as i386_print_insn(). */
static int
-gdb_print_insn_x86_64 (bfd_vma memaddr, disassemble_info * info)
+x86_64_print_insn (bfd_vma pc, disassemble_info *info)
{
- if (disassembly_flavour == att_flavour)
- return print_insn_i386_att (memaddr, info);
- else if (disassembly_flavour == intel_flavour)
- return print_insn_i386_intel (memaddr, info);
- /* Never reached -- disassembly_flavour is always either att_flavour
- or intel_flavour. */
- internal_error (__FILE__, __LINE__, "failed internal consistency check");
+ info->disassembler_options = (char *) disassembly_flavour;
+ info->mach = gdbarch_bfd_arch_info (current_gdbarch)->mach;
+
+ return print_insn_i386 (pc, info);
}
@@ -1021,6 +1016,8 @@ x86_64_gdbarch_init (struct gdbarch_info
set_gdbarch_read_fp (gdbarch, cfi_read_fp);
+ set_gdbarch_print_insn (gdbarch, x86_64_print_insn);
+
/* Discard from the stack the innermost frame, restoring all registers. */
set_gdbarch_pop_frame (gdbarch, x86_64_pop_frame);
@@ -1142,9 +1139,6 @@ _initialize_x86_64_tdep (void)
offset += x86_64_register_info_table[i].size;
}
}
-
- tm_print_insn = gdb_print_insn_x86_64;
- tm_print_insn_info.mach = bfd_mach_x86_64;
/* Add the variable that controls the disassembly flavour. */
{