From patchwork Fri May 11 10:52:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Hayward X-Patchwork-Id: 27235 Received: (qmail 101482 invoked by alias); 11 May 2018 10:53:18 -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 101354 invoked by uid 89); 11 May 2018 10:53:17 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.0 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=num_regs X-HELO: EUR01-VE1-obe.outbound.protection.outlook.com Received: from mail-ve1eur01on0066.outbound.protection.outlook.com (HELO EUR01-VE1-obe.outbound.protection.outlook.com) (104.47.1.66) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 11 May 2018 10:53:15 +0000 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Alan.Hayward@arm.com; Received: from C02TF0U7HF1T.arm.com (217.140.96.140) by VI1PR0802MB2143.eurprd08.prod.outlook.com (2603:10a6:800:9b::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.755.16; Fri, 11 May 2018 10:53:03 +0000 From: Alan Hayward To: gdb-patches@sourceware.org Cc: nd@arm.com, Alan Hayward Subject: [PATCH 4/8] Enable SVE for GDB Date: Fri, 11 May 2018 11:52:52 +0100 Message-Id: <20180511105256.27388-5-alan.hayward@arm.com> In-Reply-To: <20180511105256.27388-1-alan.hayward@arm.com> References: <20180511105256.27388-1-alan.hayward@arm.com> MIME-Version: 1.0 X-ClientProxiedBy: CWXP265CA0010.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:2e::22) To VI1PR0802MB2143.eurprd08.prod.outlook.com (2603:10a6:800:9b::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:VI1PR0802MB2143; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2143; 3:Dygz8ypBhr5RqjwGfJJs6eZRfu6l936jXoESVTB8dsdWXqrOdG1Gu/QVYQ2j7rJtL+iRT/UkPSr62Vq9cnPjZS+bhC0YW6YU/uaRbSO1AYVqlIb1FVkktzWm3yOmKHWaySzMvFkzHjDr6JL4iDSIHw2wtdtLp15yv6HHgI9uhf8zjboTKBQMH1ttVPB45EsmPpqfRz8jC/J0QHpc2/m7khSUpXOjeiQ+BC4lsrVDMfGbQTnA+FZWBleZsDa5AGWr; 25:g2uWyP75ffF0X9VDz8E0CGk/mN3RBQ4xmU6pLX90++qPf2Me5ntZoGGBgaqJWp1ucUONsbxQXlW4WAgnFWK6GDblUF69igd8DWMd89j6tqFfWWkggfnEe7B5z0+jO9BkeM5gh3uexpmzWfsH5lMbm8I514AdICihTSP8lOlJDoR0o5kRPIoQV+vQ8ABk1aFmGofAmCc1rwegGtbKsB19WlgCahq8tLhv6PcQNju0xGWhI114B3jB956M52M+/oWkS6YnMHGqBENR2Tqdj1zU/08sN5IGWu+ZR1cixotFkBsijG14lDeeimhjEOGBik2psIAHu6zFXps/rruJYw4/rw==; 31:2y3G+qZwk5aVkQhyrsjqIAtQ7XRnJAgidXXl1C34KQIsR4qE1xZI1HJZoZVp0FWRGi8tRhXQm95pQjBeyvcumz3m7XTlSRJGpGQUQob4BwilhmqUHvBkm2BS8qvjw/mQUSLj1l/9U2XYT2dCEvU4Lyo9o1uthi6bD8DXfgbtUAZOk1/jfjFnkCLhAQc6yQUWfra2uOKMX5OVzxKIiVnoE1KCSTBMVYd+LZI+PW+GE00= X-MS-TrafficTypeDiagnostic: VI1PR0802MB2143: NoDisclaimer: True X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2143; 20:4oZRa9gfN6a+5U8YKocQWzbbPtoUoVml6BoVQ3c/JiCqaVKUseXyWxOytaCaxRfv284AuKyKeVQbWp+ccAKgQBnF/bkaGQCdF7eG3VbxvPQCGAZ0/y9APgDukfI1OPCS0F8R6ook+6iA2a6b929BfH/lxJrbZRx4JVTRph9SUfG02USV4qk7Edft6ZIiuZgb/K5p0mZMrQZT+6lRfNL8X2KnyuZQEe8azBz4RM3535IYaKb+TnxbZMilvV9vSBJh; 4:G8SIgccVpRkRQa1/BR+e8tluJayfrVoHP+Dzm4IT+RlZ/rdofkZQ0gnvoQbVEPhBonpJJ9uJi0MZZ9XWXbUKFiXJ8YpFV2zBd7tNjGuVoAwfTB4KpXURdlTOh0rDa6ALm/CdBoQJ6GfX6oW0aJD1meEzAFZAihNGNV7ULLukhhhm728rxSwS+bJkLHN3RABmEDYIC/9Kp/J2R5Fg/NZblqH62fQ/tPgbE2ID/YBUuqK1hcKAH7zpEvIwiFcxE0lGvX6IhvMsOhSMgVvmiArN1nMMZ7Z0IzajtOWuMGhPXS1ayQ5fYLwpz60kit+jgumv X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123558120)(20161123562045)(20161123560045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:VI1PR0802MB2143; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0802MB2143; X-Forefront-PRVS: 06691A4183 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39380400002)(376002)(39860400002)(346002)(396003)(189003)(199004)(377424004)(476003)(956004)(11346002)(59450400001)(2616005)(97736004)(4326008)(48376002)(53936002)(2906002)(50466002)(446003)(66066001)(52116002)(76176011)(2351001)(72206003)(68736007)(51416003)(86362001)(47776003)(575784001)(6116002)(386003)(7696005)(3846002)(1076002)(6486002)(26005)(6666003)(25786009)(16586007)(316002)(478600001)(486006)(53416004)(2361001)(8676002)(81156014)(50226002)(5660300001)(81166006)(305945005)(7736002)(36756003)(105586002)(8936002)(106356001)(6916009)(44832011)(186003)(16526019); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0802MB2143; H:C02TF0U7HF1T.arm.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0802MB2143; 23:z1/hc3ICZkcc9hA8I2XT8S/Tcmz6a1m14mdSkFe?= =?us-ascii?Q?3OJhPKorfYl/j/xnCr9j1BiQ5T+OMOT3/KQESWE5O3TV9WDFNvYXZoQDl/fE?= =?us-ascii?Q?ROkGbXONnJuFG+AcEDVnf1eCqoSxhdjVGrc91P1h7ZKirm+vAQp1RGZMlWeN?= =?us-ascii?Q?chWYXuzGvzyzMA2H03rEolAnaWKqZmGDlL+xfX1KqyV+djQ6lQOIgogw3bzV?= =?us-ascii?Q?B9eleLyr9JlkSlIPN5BVR1DqooGhkyBO8dXf1V4TK+utoWudXG1VzeEGKEcl?= =?us-ascii?Q?10A7iqCfLgL3FgPCR4i1loWSTfEo1z5b8dABmczJeRCyQi7dE5Gony4W5Vav?= =?us-ascii?Q?c8MLUlM8e8wAkQVXXhyKQRNiv2bReI0ZhYeyQS/S3Un0Vh8jMkFy9sfRfQ1D?= =?us-ascii?Q?WNVJJvsmBgfZHzXP4epBpWNe63WIGyCr0f8v1orYFE1fKwmvwsc0jTPqenGQ?= =?us-ascii?Q?JPlixIOMwcN0L9THmg5sRtnYuQJ9aP4Y+hNWgA6rvkFgccLwUCpFImrg3+Lt?= =?us-ascii?Q?Tm4U6J0KXvTvLlURiFPlGAd7kQ16SGvyFHvJILj00dBqsd5KvVKOtmfYhUQy?= =?us-ascii?Q?gLPPvfPOBNCRo0rO7sP9UdgP2r/nWy91CAXNui98wc9xZXSz4s6WYZUprzbw?= =?us-ascii?Q?h4KCDpG0w/18ViVr817f7xOKLQdUfEx/ZGhFoN/cWW/Krazvfw9LkUXLEVPZ?= =?us-ascii?Q?ZCFZgt9n4aW2dq6zA35KMsKmAoaHKSYbntBTUOH1B124o53V3YSqF1Qj302v?= =?us-ascii?Q?DTQLx4gq1Bopz3tt3Ik+BTM2qHKiZsXvdr3Xfm6owBpKU8tU/oDM4k0MYlj0?= =?us-ascii?Q?CP8erexj1T7C+qIr4h05MKxRV0+LIVyo5/ygu3cuGqI0/k5Ov9Oh4pwCdrMD?= =?us-ascii?Q?YX5GghOAdUhOEz9oywYW7Rzmw/2lFhipGKu1mpLv1ky5307hqZlDUyfu+O9e?= =?us-ascii?Q?s4QVpsk/yQcoRpodPtmYlqEt2d+9zoiuGSRiLO1UTS4VvZ3noAMqBsFq3QUU?= =?us-ascii?Q?H5D56+Vu7KK7nemdQ21PjU//9o7jqO0LAV62aFJXV1Cs7aCy3lNfVAHinRui?= =?us-ascii?Q?emVtXvP09DxfO9A4kAQn5mjYHBT5VpVosThPdZkMylhIQpK9+sw25sFHPFqg?= =?us-ascii?Q?bnDsLIjKOCpP1XIZZhpLKwDwqVOkJG5O56dr5L+ltfiwKEqlevgZbPihz4pk?= =?us-ascii?Q?PTbTUxBp+hUGTE0W+U+UkxLd2FavHnV1iPodw428xiX2C7xIpNnGZI8Ecqsf?= =?us-ascii?Q?WRR41CngaUgUXbsYYnXb6Ja6a4RLk5gzgZo6mDD0GSmJZ4Hs7jZlx/2xvmcg?= =?us-ascii?Q?ijaVu3r9rf8G8vCB1jIdH8zyuTW7/TrzN2LmjdPj/gLEOgO7TCQRO1jDRTVs?= =?us-ascii?Q?bnIlIsw=3D=3D?= X-Microsoft-Antispam-Message-Info: R/9MUJBzu8FDJwDxk5N2kTr0zD0TWx1A7LdsTevrjng5yRHvLKPI7cZIq63Ur0kXVe/95gKmQ5fygmLOSGc1Hj9c5TTCtpxwRjPSbHn5RdNfDHi9ZRQwYhDEXQoz4bDgc9p28H+Or98RK/xOaZv/e0tfEaDeEfl0HSAvjek7zLly+H7NveSAYQeMUE2Uc8DK X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2143; 6:42KW2wImwTpXd2/a8ezi6KzwSmW8ESaw/JELfOTIn+JTAFbCIZc5acAuoEQtD/wbLZEdWEVeJEeK/ZtLgdsVXcp+/FtrC++oIRirZDhzxnD/TuMEzdFqVljErToiRG7mU/V2PHkNiPOlQDxdK1whba2zd+byfgw8dJkIzTmBsD6e62nn7/B1m6uiaaXXcBC90HYrDPLWTi08TvNOBEOjPHODNyWcdpWqdh7zBeCtN7AOJcx/q+fs+tzZOhS2iNdltCRYbnOofRHLARZ3b2x+HeBZ5UKenR60oqdPVrQE20uW6MqoGaHiJy6n4oD2GzX1o/qNs/R7tMtWFh6Wn86dqCJQQrKPjiEF2wYd+RQjZwWEw+cOVwSfSxiW7cBZNZKTAxj0w5kIOGzu2SXD5Nw5x0YHwGsJzuKcVhXI5tTDxU4l/PQuBMEAYkatsUNQbGFUkFwZ9xcqKTNXinfht76IGA==; 5:BIygVI5GsaWwfdlNiylERHW3I0S8g3SMH9tNr7wLisQQqGQU7+TkKceM66sdYxBHO1U6dM2ELvnGpdpoJm7SijBaKC20G0iSM7hHZEEiQcRLCOUTriFS59XJOV8w8y35UUa7gp/1YgMFCyNNeTBZ+OM+AIDYF7rx82UDbGDLzG4=; 24:HuvX888yfAl1d5mL+Alb7R5EJmAvsw5Hyk3aV5/zKyATSao990/7A+YT9DyWQBdDK7gAncO4c7Wsio6TwhksZW0gcQu+MDU/jr91yFgqfKo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0802MB2143; 7:cGW7Qo54EAOssrEDLlrb/8DXjVdpkTF95tXOU1s+nGuamfs1EcrgABOyFtn5aaUiZqL88b3AuUNQ/zMVg2Ppn5kqDlXTrWq4H5FQW0GSz4JkDyE72317F5cNp0xrh8AeUm25EpOGZ6uTl13oavSknnabu4GoEuvpscHewStMr/+8ehqkMTT0wot4uOwgDW+PgnCo1vxmKPf51AhB5eKhxoBmuFn98b67HDwSE+xv+48b1v28oGPaNRmlYzqKX59B X-MS-Office365-Filtering-Correlation-Id: 5de767d2-c1f8-4c0b-c02c-08d5b72d5ef8 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2018 10:53:03.3971 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5de767d2-c1f8-4c0b-c02c-08d5b72d5ef8 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2143 X-IsSubscribed: yes This patch enables SVE support for GDB by reading the VQ when creating a target description. It also ensures that SVE is taken into account when creating the tdep structure, and stores the current VQ value directly in tdep. With this patch, gdb on an aarch64 system with SVE will now detect SVE. The SVE registers will be displayed (but the contents will be invalid). The following patches fill out the contents. 2018-05-101 Alan Hayward * aarch64-linux-nat.c (aarch64_linux_read_description): Support SVE. * aarch64-tdep.c (aarch64_get_tdesc_vq): New function. (aarch64_gdbarch_init): Check for SVE. * aarch64-tdep.h (gdbarch_tdep::has_sve): New function. --- gdb/aarch64-linux-nat.c | 4 +-- gdb/aarch64-tdep.c | 73 +++++++++++++++++++++++++++++++++++++++---------- gdb/aarch64-tdep.h | 9 ++++++ 3 files changed, 69 insertions(+), 17 deletions(-) diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c index 9a6ee91d2d..1270b7e0c0 100644 --- a/gdb/aarch64-linux-nat.c +++ b/gdb/aarch64-linux-nat.c @@ -32,6 +32,7 @@ #include "aarch32-linux-nat.h" #include "nat/aarch64-linux.h" #include "nat/aarch64-linux-hw-point.h" +#include "nat/aarch64-sve-linux-ptrace.h" #include "elf/external.h" #include "elf/common.h" @@ -541,8 +542,7 @@ aarch64_linux_nat_target::read_description () if (ret == 0) return tdesc_arm_with_neon; else - /* SVE not yet supported. */ - return aarch64_read_description (0); + return aarch64_read_description (aarch64_sve_get_vq (tid)); } /* Convert a native/host siginfo object, into/from the siginfo in the diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index 1dc31a43bd..7893579d58 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -2873,6 +2873,26 @@ aarch64_read_description (long vq) return tdesc; } +/* Return the VQ used when creating the target description TDESC. */ + +static long +aarch64_get_tdesc_vq (const struct target_desc *tdesc) +{ + const struct tdesc_feature *feature_sve; + + if (!tdesc_has_registers (tdesc)) + return 0; + + feature_sve = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.sve"); + + if (feature_sve == nullptr) + return 0; + + long vl = tdesc_register_size (feature_sve, aarch64_sve_register_names[0]); + return sve_vq_from_vl (vl); +} + + /* 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. @@ -2890,20 +2910,22 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) const struct target_desc *tdesc = info.target_desc; int i; int valid_p = 1; - const struct tdesc_feature *feature; + const struct tdesc_feature *feature_core; + const struct tdesc_feature *feature_fpu; + const struct tdesc_feature *feature_sve; int num_regs = 0; int num_pseudo_regs = 0; /* Ensure we always have a target descriptor. */ if (!tdesc_has_registers (tdesc)) - /* SVE is not yet supported. */ tdesc = aarch64_read_description (0); - gdb_assert (tdesc); - feature = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.core"); + feature_core = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.core"); + feature_fpu = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.fpu"); + feature_sve = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.sve"); - if (feature == NULL) + if (feature_core == NULL) return NULL; tdesc_data = tdesc_data_alloc (); @@ -2911,25 +2933,45 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) /* Validate the descriptor provides the mandatory core R registers and allocate their numbers. */ for (i = 0; i < ARRAY_SIZE (aarch64_r_register_names); i++) - valid_p &= - tdesc_numbered_register (feature, tdesc_data, AARCH64_X0_REGNUM + i, - aarch64_r_register_names[i]); + valid_p &= tdesc_numbered_register (feature_core, tdesc_data, + AARCH64_X0_REGNUM + i, + aarch64_r_register_names[i]); num_regs = AARCH64_X0_REGNUM + i; - /* Look for the V registers. */ - feature = tdesc_find_feature (tdesc, "org.gnu.gdb.aarch64.fpu"); - if (feature) + /* Add the V registers. */ + if (feature_fpu != NULL) { + gdb_assert (feature_sve == NULL); + /* Validate the descriptor provides the mandatory V registers - and allocate their numbers. */ + and allocate their numbers. */ for (i = 0; i < ARRAY_SIZE (aarch64_v_register_names); i++) - valid_p &= - tdesc_numbered_register (feature, tdesc_data, AARCH64_V0_REGNUM + i, - aarch64_v_register_names[i]); + valid_p &= tdesc_numbered_register (feature_fpu, tdesc_data, + AARCH64_V0_REGNUM + i, + aarch64_v_register_names[i]); num_regs = AARCH64_V0_REGNUM + i; + } + + /* Add the SVE registers. */ + if (feature_sve != NULL) + { + gdb_assert (feature_fpu == NULL); + + /* Validate the descriptor provides the mandatory sve registers + and allocate their numbers. */ + for (i = 0; i < ARRAY_SIZE (aarch64_sve_register_names); i++) + valid_p &= tdesc_numbered_register (feature_sve, tdesc_data, + AARCH64_SVE_Z0_REGNUM + i, + aarch64_sve_register_names[i]); + num_regs = AARCH64_SVE_Z0_REGNUM + i; + num_pseudo_regs += 32; /* add the Vn register pseudos. */ + } + + if (feature_fpu != NULL || feature_sve != NULL) + { num_pseudo_regs += 32; /* add the Qn scalar register pseudos */ num_pseudo_regs += 32; /* add the Dn scalar register pseudos */ num_pseudo_regs += 32; /* add the Sn scalar register pseudos */ @@ -2969,6 +3011,7 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) tdep->lowest_pc = 0x20; tdep->jb_pc = -1; /* Longjump support not enabled by default. */ tdep->jb_elt_size = 8; + tdep->vq = aarch64_get_tdesc_vq (tdesc); set_gdbarch_push_dummy_call (gdbarch, aarch64_push_dummy_call); set_gdbarch_frame_align (gdbarch, aarch64_frame_align); diff --git a/gdb/aarch64-tdep.h b/gdb/aarch64-tdep.h index c9fd7b3578..046de6228f 100644 --- a/gdb/aarch64-tdep.h +++ b/gdb/aarch64-tdep.h @@ -73,6 +73,15 @@ struct gdbarch_tdep /* syscall record. */ int (*aarch64_syscall_record) (struct regcache *regcache, unsigned long svc_number); + + /* The VQ value for SVE targets, or zero if SVE is not supported. */ + long vq; + + /* Returns true if the target supports SVE. */ + bool has_sve () + { + return vq != 0; + } }; const target_desc *aarch64_read_description (long vq);