From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6338 invoked by alias); 11 Apr 2003 07:47:54 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 6322 invoked from network); 11 Apr 2003 07:47:53 -0000 Received: from unknown (HELO lacrosse.corp.redhat.com) (66.187.233.200) by sources.redhat.com with SMTP; 11 Apr 2003 07:47:53 -0000 Received: from free.redhat.lsd.ic.unicamp.br (aoliva.cipe.redhat.com [10.0.1.10]) by lacrosse.corp.redhat.com (8.11.6/8.9.3) with ESMTP id h3B7lou16349; Fri, 11 Apr 2003 03:47:51 -0400 Received: from free.redhat.lsd.ic.unicamp.br (free.redhat.lsd.ic.unicamp.br [127.0.0.1]) by free.redhat.lsd.ic.unicamp.br (8.12.8/8.12.8) with ESMTP id h3B7ln8i014126; Fri, 11 Apr 2003 04:47:49 -0300 Received: (from aoliva@localhost) by free.redhat.lsd.ic.unicamp.br (8.12.8/8.12.8/Submit) id h3B7ln4h014122; Fri, 11 Apr 2003 04:47:49 -0300 To: cgd@broadcom.com Cc: "Andrew Cagney" , gdb-patches@sources.redhat.com, binutils@sources.redhat.com Subject: Re: use MIPS NewABI register names when disassembling NewABI code References: <3E927BCA.1080702@redhat.com> <3E93391F.2050005@redhat.com> <3E94339A.8030405@redhat.com> From: Alexandre Oliva Organization: GCC Team, Red Hat Date: Fri, 11 Apr 2003 07:47:00 -0000 In-Reply-To: Message-ID: User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-SW-Source: 2003-04/txt/msg00229.txt.bz2 --=-=-= Content-length: 973 On Apr 11, 2003, cgd@broadcom.com wrote: > At Fri, 11 Apr 2003 05:43:18 +0000 (UTC), "Alexandre Oliva" wrote: >> * mips-dis.c (_print_insn_mips): Override reg_names from >> disassembler_options. > Uh... Well... "I'm not the maintainer, but i'd say no." 8-) Fair enough :-) > Note the line: > parse_mips_dis_options (info->disassembler_options); > about 18 lines above your new lines. It already supports what you > want, but with a different syntax. Sorry that I didn't try diff -u18 :-) It really sucks to be working out of a relatively old branch and trying to contribute to the net at the same time :-( > "gpr_names=ABI" instead, for values of ABI: 32, n32, 64. Thanks for the pointer. Here's a fixed patch that refrains from ``fixing'' opcodes. > IMO it's best to use the correct names for ABIs Except that I've never been able to figure out whether the correct name for the N64 abi is N64 or just 64. Not that I care, mind you ;-) Ok to install? --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=mips-gdb-abi-disassemble.patch Content-length: 4190 Index: gdb/ChangeLog from Alexandre Oliva * Makefile.in (libbfd_h): Added missing setting. * mips-tdep.c (mips_gdbarch_init): Set disassembler_options according to the selected ABI. Index: gdb/Makefile.in =================================================================== RCS file: /cvs/src/src/gdb/Makefile.in,v retrieving revision 1.361 diff -u -p -r1.361 Makefile.in --- gdb/Makefile.in 10 Apr 2003 13:15:50 -0000 1.361 +++ gdb/Makefile.in 11 Apr 2003 07:43:10 -0000 @@ -574,6 +574,7 @@ elf_sh_h = $(INCLUDE_DIR)/elf/sh.h elf_arm_h = $(INCLUDE_DIR)/elf/arm.h $(elf_reloc_macros_h) elf_bfd_h = $(BFD_SRC)/elf-bfd.h libaout_h = $(BFD_SRC)/libaout.h +libbfd_h = $(BFD_SRC)/libbfd.h remote_sim_h = $(INCLUDE_DIR)/gdb/remote-sim.h demangle_h = $(INCLUDE_DIR)/demangle.h obstack_h = $(INCLUDE_DIR)/obstack.h Index: gdb/mips-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/mips-tdep.c,v retrieving revision 1.187 diff -u -p -r1.187 mips-tdep.c --- gdb/mips-tdep.c 8 Apr 2003 19:21:15 -0000 1.187 +++ gdb/mips-tdep.c 11 Apr 2003 07:43:14 -0000 @@ -5731,6 +5731,34 @@ mips_gdbarch_init (struct gdbarch_info i if (wanted_abi != MIPS_ABI_UNKNOWN) mips_abi = wanted_abi; + /* We have to set tm_print_insn_info before looking for a + pre-existing architecture, otherwise we may return before we get + a chance to set it up. */ + if (mips_abi == MIPS_ABI_N32 || mips_abi == MIPS_ABI_N64) + { + /* Set up the disassembler info, so that we get the right + register names from libopcodes. */ + if (mips_abi == MIPS_ABI_N32) + tm_print_insn_info.disassembler_options = "gpr-names=n32"; + else + tm_print_insn_info.disassembler_options = "gpr-names=64"; + tm_print_insn_info.flavour = bfd_target_elf_flavour; + tm_print_insn_info.arch = bfd_arch_mips; + if (info.bfd_arch_info != NULL + && info.bfd_arch_info->arch == bfd_arch_mips + && info.bfd_arch_info->mach) + tm_print_insn_info.mach = info.bfd_arch_info->mach; + else + tm_print_insn_info.mach = bfd_mach_mips8000; + } + else + /* This string is not recognized explicitly by the disassembler, + but it tells the disassembler to not try to guess the ABI from + the bfd elf headers, such that, if the user overrides the ABI + of a program linked as NewABI, the disassembly will follow the + register naming conventions specified by the user. */ + tm_print_insn_info.disassembler_options = "gpr-names=32"; + if (gdbarch_debug) { fprintf_unfiltered (gdb_stdlog, @@ -5875,18 +5903,6 @@ mips_gdbarch_init (struct gdbarch_info i set_gdbarch_long_bit (gdbarch, 32); set_gdbarch_ptr_bit (gdbarch, 32); set_gdbarch_long_long_bit (gdbarch, 64); - - /* Set up the disassembler info, so that we get the right - register names from libopcodes. */ - tm_print_insn_info.flavour = bfd_target_elf_flavour; - tm_print_insn_info.arch = bfd_arch_mips; - if (info.bfd_arch_info != NULL - && info.bfd_arch_info->arch == bfd_arch_mips - && info.bfd_arch_info->mach) - tm_print_insn_info.mach = info.bfd_arch_info->mach; - else - tm_print_insn_info.mach = bfd_mach_mips8000; - set_gdbarch_use_struct_convention (gdbarch, mips_n32n64_use_struct_convention); set_gdbarch_reg_struct_has_addr (gdbarch, @@ -5906,18 +5922,6 @@ mips_gdbarch_init (struct gdbarch_info i set_gdbarch_long_bit (gdbarch, 64); set_gdbarch_ptr_bit (gdbarch, 64); set_gdbarch_long_long_bit (gdbarch, 64); - - /* Set up the disassembler info, so that we get the right - register names from libopcodes. */ - tm_print_insn_info.flavour = bfd_target_elf_flavour; - tm_print_insn_info.arch = bfd_arch_mips; - if (info.bfd_arch_info != NULL - && info.bfd_arch_info->arch == bfd_arch_mips - && info.bfd_arch_info->mach) - tm_print_insn_info.mach = info.bfd_arch_info->mach; - else - tm_print_insn_info.mach = bfd_mach_mips8000; - set_gdbarch_use_struct_convention (gdbarch, mips_n32n64_use_struct_convention); set_gdbarch_reg_struct_has_addr (gdbarch, --=-=-= Content-length: 289 -- Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} Free Software Evangelist Professional serial bug killer --=-=-=--