Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Alexandre Oliva <aoliva@redhat.com>
To: cgd@broadcom.com
Cc: "Andrew Cagney" <ac131313@redhat.com>,
	gdb-patches@sources.redhat.com, binutils@sources.redhat.com
Subject: Re: use MIPS NewABI register names when disassembling NewABI code
Date: Fri, 11 Apr 2003 07:47:00 -0000	[thread overview]
Message-ID: <orznmxbhlm.fsf@free.redhat.lsd.ic.unicamp.br> (raw)
In-Reply-To: <yov5brzdo9k2.fsf@broadcom.com>

[-- Attachment #1: Type: text/plain, Size: 973 bytes --]

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?


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: mips-gdb-abi-disassemble.patch --]
[-- Type: text/x-patch, Size: 4190 bytes --]

Index: gdb/ChangeLog
from  Alexandre Oliva  <aoliva@redhat.com>

	* 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, 

[-- Attachment #3: Type: text/plain, Size: 289 bytes --]


-- 
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

  reply	other threads:[~2003-04-11  7:47 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-04-08  2:31 Alexandre Oliva
2003-04-08  7:35 ` Andrew Cagney
2003-04-08 11:59   ` Alexandre Oliva
2003-04-08 21:03     ` Andrew Cagney
2003-04-09  3:45       ` Alexandre Oliva
2003-04-09 13:57         ` Daniel Jacobowitz
2003-04-09 14:52         ` Andrew Cagney
2003-04-11  5:43           ` Alexandre Oliva
     [not found]             ` <mailpost.1050039798.9718@news-sj1-1>
2003-04-11  6:03               ` cgd
2003-04-11  7:47                 ` Alexandre Oliva [this message]
2003-04-11 15:06                   ` Andrew Cagney
2003-04-12  0:31                     ` Alexandre Oliva
2003-04-28 21:13                       ` Andrew Cagney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=orznmxbhlm.fsf@free.redhat.lsd.ic.unicamp.br \
    --to=aoliva@redhat.com \
    --cc=ac131313@redhat.com \
    --cc=binutils@sources.redhat.com \
    --cc=cgd@broadcom.com \
    --cc=gdb-patches@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox