public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Add initial compile command support to RISC-V port.
@ 2019-10-16 17:59 Jim Wilson
  0 siblings, 0 replies; only message in thread
From: Jim Wilson @ 2019-10-16 17:59 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ff371ec99988662e16b061fe0f66e989340f129a

commit ff371ec99988662e16b061fe0f66e989340f129a
Author: Jim Wilson <jimw@sifive.com>
Date:   Wed Oct 16 10:58:37 2019 -0700

    Add initial compile command support to RISC-V port.
    
    This adds initial compile command support to the RISC-V port.  This fixes
    about 228 testsuite failures on a riscv64-linux machine.  We need to get
    the triplet right which is normally riscv64 or riscv32 instead of the
    default riscv.  Also, we need to get the compiler options right, since we
    don't accept the default -m64 and -mcmodel=large options, so we need to
    construct -march and -mabi options which are correct for the target.  We
    currently don't have info about all extensions used by the target, so this
    may need to be adjusted later.  For now, I'm assuming that we have all
    extensions required by the linux platform spec.
    
    	gdb/
    	* riscv-tdep.c (riscv_gcc_target_options): New.
    	(riscv_gnu_triplet_regexp): New.
    	(riscv_gdbarch_init): Call set_gdbarch_gcc_triplet_options and
    	set_gdbarch_gnu_triplet_regexp.
    
    Change-Id: I315ce8de7789ddf7bdd3b532f917519464941294

Diff:
---
 gdb/ChangeLog    |  7 +++++++
 gdb/riscv-tdep.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e79f449..6de9f3d 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2019-10-16  Jim Wilson  <jimw@sifive.com>
+
+	* riscv-tdep.c (riscv_gcc_target_options): New.
+	(riscv_gnu_triplet_regexp): New.
+	(riscv_gdbarch_init): Call set_gdbarch_gcc_triplet_options and
+	set_gdbarch_gnu_triplet_regexp.
+
 2019-10-16  Christian Biesinger  <cbiesinger@google.com>
 
 	* Makefile.in: Add xml-builtin.h.
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index 003b230..031fc8f 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -3055,6 +3055,58 @@ riscv_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
   return -1;
 }
 
+/* Implement the gcc_target_options method.  We have to select the arch and abi
+   from the feature info.  We have enough feature info to select the abi, but
+   not enough info for the arch given all of the possible architecture
+   extensions.  So choose reasonable defaults for now.  */
+
+static std::string
+riscv_gcc_target_options (struct gdbarch *gdbarch)
+{
+  int isa_xlen = riscv_isa_xlen (gdbarch);
+  int isa_flen = riscv_isa_flen (gdbarch);
+  int abi_xlen = riscv_abi_xlen (gdbarch);
+  int abi_flen = riscv_abi_flen (gdbarch);
+  std::string target_options;
+
+  target_options = "-march=rv";
+  if (isa_xlen == 8)
+    target_options += "64";
+  else
+    target_options += "32";
+  if (isa_flen == 8)
+    target_options += "gc";
+  else if (isa_flen == 4)
+    target_options += "imafc";
+  else
+    target_options += "imac";
+
+  target_options += " -mabi=";
+  if (abi_xlen == 8)
+    target_options += "lp64";
+  else
+    target_options += "ilp32";
+  if (abi_flen == 8)
+    target_options += "d";
+  else if (abi_flen == 4)
+    target_options += "f";
+
+  /* The gdb loader doesn't handle link-time relaxation relocations.  */
+  target_options += " -mno-relax";
+
+  return target_options;
+}
+
+/* Implement the gnu_triplet_regexp method.  A single compiler supports both
+   32-bit and 64-bit code, and may be named riscv32 or riscv64 or (not
+   recommended) riscv.  */
+
+static const char *
+riscv_gnu_triplet_regexp (struct gdbarch *gdbarch)
+{
+  return "riscv(32|64)?";
+}
+
 /* Initialize the current architecture based on INFO.  If possible,
    re-use an architecture from ARCHES, which is a list of
    architectures already created during this debugging session.
@@ -3299,6 +3351,10 @@ riscv_gdbarch_init (struct gdbarch_info info,
     riscv_setup_register_aliases (gdbarch, &riscv_freg_feature);
   riscv_setup_register_aliases (gdbarch, &riscv_csr_feature);
 
+  /* Compile command hooks.  */
+  set_gdbarch_gcc_target_options (gdbarch, riscv_gcc_target_options);
+  set_gdbarch_gnu_triplet_regexp (gdbarch, riscv_gnu_triplet_regexp);
+
   /* Hook in OS ABI-specific overrides, if they have been registered.  */
   gdbarch_init_osabi (info, gdbarch);


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-10-16 17:59 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-16 17:59 [binutils-gdb] Add initial compile command support to RISC-V port Jim Wilson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).