public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* Change in binutils-gdb[master]: Add initial compile command support to RISC-V port.
@ 2019-10-14 19:18 Jim Wilson (Code Review)
  2019-10-14 22:51 ` Andrew Burgess (Code Review)
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Jim Wilson (Code Review) @ 2019-10-14 19:18 UTC (permalink / raw)
  To: gdb-patches

Jim Wilson has uploaded this change for review. ( https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/42 )


Change subject: Add initial compile command support to RISC-V port.
......................................................................

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
---
M gdb/ChangeLog
M gdb/riscv-tdep.c
2 files changed, 63 insertions(+), 0 deletions(-)



  git pull ssh://gnutoolchain-gerrit.osci.io:29418/binutils-gdb refs/changes/42/42/1

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index c6fff16..91e1ab7 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2019-10-14  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-14  Simon Marchi  <simon.marchi@polymtl.ca>
 
 	* dwarf2read.c: Remove includes.
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index 003b230..33ceaed 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -3055,6 +3055,58 @@
   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 char *
+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);
+  char string[64];
+
+  strcpy (string, "-march=rv");
+  if (isa_xlen == 8)
+    strcat (string, "64");
+  else
+    strcat (string, "32");
+  if (isa_flen == 8)
+    strcat (string, "gc");
+  else if (isa_flen == 4)
+    strcat (string, "imafc");
+  else
+    strcat (string, "imac");
+
+  strcat (string, " -mabi=");
+  if (abi_xlen == 8)
+    strcat (string, "lp64");
+  else
+    strcat (string, "ilp32");
+  if (abi_flen == 8)
+    strcat (string, "d");
+  else if (abi_flen == 4)
+    strcat (string, "f");
+
+  /* The gdb loader doesn't handle link-time relaxation relocations.  */
+  strcat (string, " -mno-relax");
+
+  return xstrdup (string);
+}
+
+/* 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_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);
 

-- 
To view, visit https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/42
To unsubscribe, or for help writing mail filters, visit https://gnutoolchain-gerrit.osci.io/r/settings

Gerrit-Project: binutils-gdb
Gerrit-Branch: master
Gerrit-Change-Id: I315ce8de7789ddf7bdd3b532f917519464941294
Gerrit-Change-Number: 42
Gerrit-PatchSet: 1
Gerrit-Owner: Jim Wilson <jimw@sifive.com>
Gerrit-MessageType: newchange

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Change in binutils-gdb[master]: Add initial compile command support to RISC-V port.
  2019-10-14 19:18 Change in binutils-gdb[master]: Add initial compile command support to RISC-V port Jim Wilson (Code Review)
@ 2019-10-14 22:51 ` Andrew Burgess (Code Review)
  2019-10-15 17:08 ` Tom Tromey (Code Review)
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Andrew Burgess (Code Review) @ 2019-10-14 22:51 UTC (permalink / raw)
  To: Jim Wilson, gdb-patches

Andrew Burgess has posted comments on this change. ( https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/42 )

Change subject: Add initial compile command support to RISC-V port.
......................................................................


Patch Set 1: Code-Review+2

(1 comment)

I'm happy with this if you change to using std::string as described in the comment.

Thanks,
Andrew

https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/42/1/gdb/riscv-tdep.c 
File gdb/riscv-tdep.c:

https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/42/1/gdb/riscv-tdep.c@3070 
PS1, Line 3070:   char string[64];
I think using std::string and then just 'string += "some text";' would be preferred.



-- 
To view, visit https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/42
To unsubscribe, or for help writing mail filters, visit https://gnutoolchain-gerrit.osci.io/r/settings

Gerrit-Project: binutils-gdb
Gerrit-Branch: master
Gerrit-Change-Id: I315ce8de7789ddf7bdd3b532f917519464941294
Gerrit-Change-Number: 42
Gerrit-PatchSet: 1
Gerrit-Owner: Jim Wilson <jimw@sifive.com>
Gerrit-Reviewer: Andrew Burgess <andrew.burgess@embecosm.com>
Gerrit-Comment-Date: Mon, 14 Oct 2019 22:51:34 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Change in binutils-gdb[master]: Add initial compile command support to RISC-V port.
  2019-10-14 19:18 Change in binutils-gdb[master]: Add initial compile command support to RISC-V port Jim Wilson (Code Review)
  2019-10-14 22:51 ` Andrew Burgess (Code Review)
@ 2019-10-15 17:08 ` Tom Tromey (Code Review)
  2019-10-16 17:50 ` [review] " Jim Wilson (Code Review)
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Tom Tromey (Code Review) @ 2019-10-15 17:08 UTC (permalink / raw)
  To: Jim Wilson, gdb-patches; +Cc: Andrew Burgess

Tom Tromey has posted comments on this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/42
......................................................................


Patch Set 1:

(1 comment)

https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/42/1/gdb/riscv-tdep.c 
File gdb/riscv-tdep.c:

https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/42/1/gdb/riscv-tdep.c@3070 
PS1, Line 3070:   char string[64];
> I think using std::string and then just 'string += "some text";' would be preferred.

I sent a patch to change this gdbarch function to return std::string, which should make this a bit nicer.



-- 
To view, visit https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/42
To unsubscribe, or for help writing mail filters, visit https://gnutoolchain-gerrit.osci.io/r/settings

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [review] Add initial compile command support to RISC-V port.
  2019-10-14 19:18 Change in binutils-gdb[master]: Add initial compile command support to RISC-V port Jim Wilson (Code Review)
  2019-10-14 22:51 ` Andrew Burgess (Code Review)
  2019-10-15 17:08 ` Tom Tromey (Code Review)
@ 2019-10-16 17:50 ` Jim Wilson (Code Review)
  2019-10-16 17:56 ` Tom Tromey (Code Review)
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Jim Wilson (Code Review) @ 2019-10-16 17:50 UTC (permalink / raw)
  To: Andrew Burgess, gdb-patches; +Cc: Tom Tromey

Jim Wilson has uploaded a new patch set version (#2).

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/42
......................................................................

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
---
M gdb/ChangeLog
M gdb/riscv-tdep.c
2 files changed, 63 insertions(+), 0 deletions(-)



diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index c6fff16..91e1ab7 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2019-10-14  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-14  Simon Marchi  <simon.marchi@polymtl.ca>
 
 	* dwarf2read.c: Remove includes.
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 @@
   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_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] 7+ messages in thread

* [review] Add initial compile command support to RISC-V port.
  2019-10-14 19:18 Change in binutils-gdb[master]: Add initial compile command support to RISC-V port Jim Wilson (Code Review)
                   ` (2 preceding siblings ...)
  2019-10-16 17:50 ` [review] " Jim Wilson (Code Review)
@ 2019-10-16 17:56 ` Tom Tromey (Code Review)
  2019-10-16 18:01 ` Sourceware to Gerrit sync (Code Review)
  2019-10-16 18:01 ` Sourceware to Gerrit sync (Code Review)
  5 siblings, 0 replies; 7+ messages in thread
From: Tom Tromey (Code Review) @ 2019-10-16 17:56 UTC (permalink / raw)
  To: Jim Wilson, gdb-patches; +Cc: Andrew Burgess

Tom Tromey has posted comments on this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/42
......................................................................


Patch Set 2: Code-Review+2

Thanks for the patch.  This looks good.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [review] Add initial compile command support to RISC-V port.
  2019-10-14 19:18 Change in binutils-gdb[master]: Add initial compile command support to RISC-V port Jim Wilson (Code Review)
                   ` (3 preceding siblings ...)
  2019-10-16 17:56 ` Tom Tromey (Code Review)
@ 2019-10-16 18:01 ` Sourceware to Gerrit sync (Code Review)
  2019-10-16 18:01 ` Sourceware to Gerrit sync (Code Review)
  5 siblings, 0 replies; 7+ messages in thread
From: Sourceware to Gerrit sync (Code Review) @ 2019-10-16 18:01 UTC (permalink / raw)
  To: Jim Wilson, Andrew Burgess, Tom Tromey, gdb-patches

Sourceware to Gerrit sync has uploaded a new patch set version (#3) to the change originally created by Jim Wilson.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/42
......................................................................

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
---
M gdb/ChangeLog
M gdb/riscv-tdep.c
2 files changed, 63 insertions(+), 0 deletions(-)



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 @@
   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_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] 7+ messages in thread

* [review] Add initial compile command support to RISC-V port.
  2019-10-14 19:18 Change in binutils-gdb[master]: Add initial compile command support to RISC-V port Jim Wilson (Code Review)
                   ` (4 preceding siblings ...)
  2019-10-16 18:01 ` Sourceware to Gerrit sync (Code Review)
@ 2019-10-16 18:01 ` Sourceware to Gerrit sync (Code Review)
  5 siblings, 0 replies; 7+ messages in thread
From: Sourceware to Gerrit sync (Code Review) @ 2019-10-16 18:01 UTC (permalink / raw)
  To: Jim Wilson, gdb-patches; +Cc: Tom Tromey, Andrew Burgess

Sourceware to Gerrit sync has submitted this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/42
......................................................................

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
---
M gdb/ChangeLog
M gdb/riscv-tdep.c
2 files changed, 63 insertions(+), 0 deletions(-)


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 @@
   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_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] 7+ messages in thread

end of thread, other threads:[~2019-10-16 18:01 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-14 19:18 Change in binutils-gdb[master]: Add initial compile command support to RISC-V port Jim Wilson (Code Review)
2019-10-14 22:51 ` Andrew Burgess (Code Review)
2019-10-15 17:08 ` Tom Tromey (Code Review)
2019-10-16 17:50 ` [review] " Jim Wilson (Code Review)
2019-10-16 17:56 ` Tom Tromey (Code Review)
2019-10-16 18:01 ` Sourceware to Gerrit sync (Code Review)
2019-10-16 18:01 ` Sourceware to Gerrit sync (Code Review)

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