From patchwork Wed Jun 6 15:16:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Hayward X-Patchwork-Id: 27665 Received: (qmail 104043 invoked by alias); 6 Jun 2018 15:17:27 -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 103818 invoked by uid 89); 6 Jun 2018 15:17:25 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: EUR02-HE1-obe.outbound.protection.outlook.com Received: from mail-eopbgr10071.outbound.protection.outlook.com (HELO EUR02-HE1-obe.outbound.protection.outlook.com) (40.107.1.71) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 06 Jun 2018 15:17:17 +0000 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Alan.Hayward@arm.com; Received: from C02TF0U7HF1T.arm.com (217.140.96.140) by AM4PR0802MB2132.eurprd08.prod.outlook.com (2603:10a6:200:5c::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.841.14; Wed, 6 Jun 2018 15:16:55 +0000 From: Alan Hayward To: gdb-patches@sourceware.org Cc: nd@arm.com, Alan Hayward Subject: [PATCH v2 08/10] Enable Aarch64 SVE for gdbserver Date: Wed, 6 Jun 2018 16:16:27 +0100 Message-Id: <20180606151629.36602-9-alan.hayward@arm.com> In-Reply-To: <20180606151629.36602-1-alan.hayward@arm.com> References: <20180606151629.36602-1-alan.hayward@arm.com> MIME-Version: 1.0 X-ClientProxiedBy: CWLP265CA0083.GBRP265.PROD.OUTLOOK.COM (2603:10a6:401:50::23) To AM4PR0802MB2132.eurprd08.prod.outlook.com (2603:10a6:200:5c::23) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-TrafficTypeDiagnostic: AM4PR0802MB2132: NoDisclaimer: True X-Exchange-Antispam-Report-Test: UriScan:(250305191791016)(180628864354917)(22074186197030); X-MS-Exchange-SenderADCheck: 1 X-Forefront-PRVS: 06952FC175 Received-SPF: None (protection.outlook.com: arm.com does not designate permitted sender hosts) SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Office365-Filtering-Correlation-Id: c9509e4c-cc19-446d-78a5-08d5cbc08a21 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2018 15:16:55.1745 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c9509e4c-cc19-446d-78a5-08d5cbc08a21 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0802MB2132 X-IsSubscribed: yes Simply add the check for SVE, similar to gdb. 2018-06-06 Alan Hayward gdbserver/ * linux-aarch64-ipa.c (get_ipa_tdesc): Add null VQ param. (initialize_low_tracepoint): Likewise * linux-aarch64-low.c (aarch64_arch_setup): Get VQ. * linux-aarch64-tdesc-selftest.c (aarch64_tdesc_test): Add null VQ param. * linux-aarch64-tdesc.c (aarch64_linux_read_description): Add VQ checks. * linux-aarch64-tdesc.h (aarch64_linux_read_description): Add VQ. --- gdb/gdbserver/linux-aarch64-ipa.c | 9 +++++---- gdb/gdbserver/linux-aarch64-low.c | 6 +++++- gdb/gdbserver/linux-aarch64-tdesc-selftest.c | 2 +- gdb/gdbserver/linux-aarch64-tdesc.c | 30 ++++++++++++++++++++-------- gdb/gdbserver/linux-aarch64-tdesc.h | 2 +- 5 files changed, 34 insertions(+), 15 deletions(-) diff --git a/gdb/gdbserver/linux-aarch64-ipa.c b/gdb/gdbserver/linux-aarch64-ipa.c index 3095408cf8..98a758f770 100644 --- a/gdb/gdbserver/linux-aarch64-ipa.c +++ b/gdb/gdbserver/linux-aarch64-ipa.c @@ -147,12 +147,12 @@ get_raw_reg (const unsigned char *raw_regs, int regnum) /* Return target_desc to use for IPA, given the tdesc index passed by gdbserver. Index is ignored, since we have only one tdesc - at the moment. */ + at the moment. SVE not yet supported. */ const struct target_desc * get_ipa_tdesc (int idx) { - return aarch64_linux_read_description (); + return aarch64_linux_read_description (0); } /* Allocate buffer for the jump pads. The branch instruction has a reach @@ -204,5 +204,6 @@ alloc_jump_pad_buffer (size_t size) void initialize_low_tracepoint (void) { - aarch64_linux_read_description (); -} + /* SVE not yet supported. */ + aarch64_linux_read_description (0); +} \ No newline at end of file diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c index 7ea24c2363..9db9a7c1c3 100644 --- a/gdb/gdbserver/linux-aarch64-low.c +++ b/gdb/gdbserver/linux-aarch64-low.c @@ -40,6 +40,7 @@ #include "gdb_proc_service.h" #include "arch/aarch64.h" #include "linux-aarch64-tdesc.h" +#include "nat/aarch64-sve-linux-ptrace.h" #ifdef HAVE_SYS_REG_H #include @@ -503,7 +504,10 @@ aarch64_arch_setup (void) is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine); if (is_elf64) - current_process ()->tdesc = aarch64_linux_read_description (); + { + uint64_t vq = aarch64_sve_get_vq (tid); + current_process ()->tdesc = aarch64_linux_read_description (vq); + } else current_process ()->tdesc = tdesc_arm_with_neon; diff --git a/gdb/gdbserver/linux-aarch64-tdesc-selftest.c b/gdb/gdbserver/linux-aarch64-tdesc-selftest.c index 379951ac86..eef0b9c9a6 100644 --- a/gdb/gdbserver/linux-aarch64-tdesc-selftest.c +++ b/gdb/gdbserver/linux-aarch64-tdesc-selftest.c @@ -29,7 +29,7 @@ namespace tdesc { static void aarch64_tdesc_test () { - const target_desc *tdesc = aarch64_linux_read_description (); + const target_desc *tdesc = aarch64_linux_read_description (0); SELF_CHECK (*tdesc == *tdesc_aarch64); } } diff --git a/gdb/gdbserver/linux-aarch64-tdesc.c b/gdb/gdbserver/linux-aarch64-tdesc.c index f0761797e9..f538543175 100644 --- a/gdb/gdbserver/linux-aarch64-tdesc.c +++ b/gdb/gdbserver/linux-aarch64-tdesc.c @@ -21,23 +21,37 @@ #include "tdesc.h" #include "arch/aarch64.h" #include "linux-aarch32-low.h" +#include + +/* All possible aarch64 target descriptors. */ +struct target_desc *tdesc_aarch64_list[AARCH64_MAX_SVE_VQ + 1]; /* Create the aarch64 target description. */ const target_desc * -aarch64_linux_read_description () +aarch64_linux_read_description (uint64_t vq) { - static target_desc *aarch64_tdesc = NULL; - target_desc **tdesc = &aarch64_tdesc; + if (vq > AARCH64_MAX_SVE_VQ) + error (_("VQ is %" PRIu64 ", maximum supported value is %d"), vq, + AARCH64_MAX_SVE_VQ); + + struct target_desc *tdesc = tdesc_aarch64_list[vq]; - if (*tdesc == NULL) + if (tdesc == NULL) { - /* SVE not yet supported. */ - *tdesc = aarch64_create_target_description (0); + tdesc = aarch64_create_target_description (vq); static const char *expedite_regs_aarch64[] = { "x29", "sp", "pc", NULL }; - init_target_desc (*tdesc, expedite_regs_aarch64); + static const char *expedite_regs_aarch64_sve[] = { "x29", "sp", "pc", + "vg", NULL }; + + if (vq == 0) + init_target_desc (tdesc, expedite_regs_aarch64); + else + init_target_desc (tdesc, expedite_regs_aarch64_sve); + + tdesc_aarch64_list[vq] = tdesc; } - return *tdesc; + return tdesc; } diff --git a/gdb/gdbserver/linux-aarch64-tdesc.h b/gdb/gdbserver/linux-aarch64-tdesc.h index dc362998c2..4d2b883b55 100644 --- a/gdb/gdbserver/linux-aarch64-tdesc.h +++ b/gdb/gdbserver/linux-aarch64-tdesc.h @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -const target_desc * aarch64_linux_read_description (); +const target_desc * aarch64_linux_read_description (uint64_t vq); #if GDB_SELF_TEST void initialize_low_tdesc ();