From patchwork Mon Oct 14 19:18:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Simon Marchi (Code Review)" X-Patchwork-Id: 34953 Received: (qmail 115835 invoked by alias); 14 Oct 2019 19:18:58 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 115827 invoked by uid 89); 14 Oct 2019 19:18:57 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.1 spammy=INFO X-HELO: mx1.osci.io Received: from polly.osci.io (HELO mx1.osci.io) (8.43.85.229) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 14 Oct 2019 19:18:54 +0000 Received: by mx1.osci.io (Postfix, from userid 994) id 6B896208F2; Mon, 14 Oct 2019 15:18:52 -0400 (EDT) Received: from gnutoolchain-gerrit.osci.io (gnutoolchain-gerrit.osci.io [IPv6:2620:52:3:1:5054:ff:fe06:16ca]) by mx1.osci.io (Postfix) with ESMTP id 19668201AD for ; Mon, 14 Oct 2019 15:18:51 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by gnutoolchain-gerrit.osci.io (Postfix) with ESMTP id EB64F29ECF for ; Mon, 14 Oct 2019 15:18:50 -0400 (EDT) X-Gerrit-PatchSet: 1 Date: Mon, 14 Oct 2019 15:18:50 -0400 From: "Jim Wilson (Code Review)" To: gdb-patches@sourceware.org Message-ID: Auto-Submitted: auto-generated X-Gerrit-MessageType: newchange Subject: Change in binutils-gdb[master]: Add initial compile command support to RISC-V port. X-Gerrit-Change-Id: I315ce8de7789ddf7bdd3b532f917519464941294 X-Gerrit-Change-Number: 42 X-Gerrit-ChangeURL: X-Gerrit-Commit: 65edd932c5d363feda1651da4a88a5e5a15c7a86 References: Reply-To: jimw@sifive.com, gdb-patches@sourceware.org MIME-Version: 1.0 Content-Disposition: inline User-Agent: Gerrit/3.0.3 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 + + * 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 * 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);