From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 38118 invoked by alias); 31 May 2018 11:46:03 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 37965 invoked by uid 89); 31 May 2018 11:45:44 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No 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,TIME_LIMIT_EXCEEDED autolearn=unavailable version=3.3.2 spammy=chunks X-HELO: sessmg22.ericsson.net Received: from sessmg22.ericsson.net (HELO sessmg22.ericsson.net) (193.180.251.58) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 31 May 2018 11:45:23 +0000 Received: from ESESSHC003.ericsson.se (Unknown_Domain [153.88.183.27]) by sessmg22.ericsson.net (Symantec Mail Security) with SMTP id 09.EE.24558.150EF0B5; Thu, 31 May 2018 13:45:21 +0200 (CEST) Received: from ESESSMR502.ericsson.se (153.88.183.110) by ESESSHC003.ericsson.se (153.88.183.27) with Microsoft SMTP Server (TLS) id 14.3.382.0; Thu, 31 May 2018 13:44:51 +0200 Received: from ESESBMB504.ericsson.se (153.88.183.171) by ESESSMR502.ericsson.se (153.88.183.110) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1466.3; Thu, 31 May 2018 13:44:51 +0200 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (153.88.183.157) by ESESBMB504.ericsson.se (153.88.183.171) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1466.3 via Frontend Transport; Thu, 31 May 2018 13:44:50 +0200 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=simon.marchi@ericsson.com; Received: from [10.0.0.110] (192.222.164.54) by BYAPR15MB2390.namprd15.prod.outlook.com (2603:10b6:a02:8c::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.797.11; Thu, 31 May 2018 11:44:48 +0000 Subject: Re: [PATCH 2/8] Function for reading the Aarch64 SVE vector length. To: Alan Hayward , CC: References: <20180511105256.27388-1-alan.hayward@arm.com> <20180511105256.27388-3-alan.hayward@arm.com> From: Simon Marchi Message-ID: Date: Thu, 31 May 2018 12:06:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: <20180511105256.27388-3-alan.hayward@arm.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-ClientProxiedBy: YQXPR0101CA0045.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c00:14::22) To BYAPR15MB2390.namprd15.prod.outlook.com (2603:10b6:a02:8c::30) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020);SRVR:BYAPR15MB2390; X-Microsoft-Exchange-Diagnostics: 1;BYAPR15MB2390;3:+UIBOSng2dDIV6iaecEkM6zn5P3j76s8R1NMTXHanQJnxtz/eGLjut2Ck55+zz5cAz5Coe36jhoijp+7cakSvB2cyH0rTji7fmUw7THGryV3oe4uROcEfr8rT7F3aEf0Xm7M8BFIiDd/t0ESAHN0iwdkzMXjomLBdA+DKCqNgdAjNWH2G3h8f6d84lAS6Fw+LvelvAIJPOqdsWjbv6iOOr86h0OyvxVjYvtfJ+GoR31l007ixz7W0ywFIZbmebtT;25:9SAtqrIBgRvHO3XrK6iYCuxpdabVr3eDDy68bJTyg+/bhVasjQlwr7HOytCoCmjrEwYBLKMTVt0zXAWcZmYJ4zqnT30DmsN521PUOraejErQwBa856b0tNfqveR/J+cgj1FYVd6o/UTr3aV2LyoXJXaI/ew4bKNsGYryo87PGwipbPyOR2I4Hrn+i1tUvMuOduZFD2MskNZoJJNyMyXaj+/d0KF5Pk/nwXXTKOpQExazGDCsBRz4UFNaojNTf/cnqzVIFjbfdvz4r4/za/UQidGeKOrjamzVk6mYPuQwz8rZFViXRkDJcL3KzD9+dQHDf1RGNh4D1BGySThS3ai8kg==;31:Sr6ByIPeVgpOLsGyAs+8BZhT+mHWHCyVTrmthxdk3Xyu3RjQft4xXcAAP7Ye8Mj2+zhFr9k4PDYR4K+/R0sN78sbIPBmA35JIKSOFnhCosAy6RXJtBBWcDaJoOT6/OgE/vpXcoFgiTF7t2TfUumtAQZR5ydqk6kkjP7LKEUq6g0h315lYHpUlHcqCWYSNTi/nYpYcL+PR6Z0gMPiZ1gIq1jJ0cmGMHJO7T0lVmEbysw= X-MS-TrafficTypeDiagnostic: BYAPR15MB2390: X-Microsoft-Exchange-Diagnostics: 1;BYAPR15MB2390;20:ypqWRNqYF67jaVcUCVSs/UcfuMt59Qif3HmRnBqYNgraN4bh2vQDHhkPO5Kv+RyFulhtmNB0dz59r3G/T0PFH3XiJFIoP94irmQeo/qFzRH4692LpLF0xOqX32727VtlfcaLmKYKhtVLk8gl982/WahksRkOUWViULZcPVS+y9DzRZiq6d0Z9hz9OWTAimtkH7NuYVNi3+++O2wDAttFEC5IaFgS+6ZJhMFLOpNDu/Ru/KF9FHTbqgGFVU9bsBjO822L3ThYCV7iHVuxcsmV1tV7ocW7N1yTWbWydrL5MmTUfPeSnJxz2MIKCHiM6g0a+29fB1lprbnKsEwoqIwYYDV3LXQokq9PJH6eUW8fLpTSBcMz4pvWQMt9pZH0bR2wcI9S3vzTw3YUOf2Iu7KidcJta05aG8qxkPKpDRrn9fZH0YYR7GWeE4GqCZt8UHosq9VPjAnLlYk86c3aMSYkVsFxl/T9ONGjFJdTm8KdOn2bVOCAI3+7/9lQQV/Z9vhD;4:RlQ5kQZ/CqCod3IsTi6pejBgWGndPf5zHmpCwSw4gKrVmgzwyxfN47TbeuwSUNZ7MzP711hQbsmayM830Ngq9vhzYBdxMcsFbmzwPQgWg9Xl6NNPO7fixQsSq4S1HdcgA55+WGZO/slf3BKhKlhuZ+SkKPYXzpbBX3JVxA3E71O+Tf6RB+1d/S7H6uylIXY+t65gRwIw8Svo8oaJFEJWwXFrzP7hLm2Tu0z6nZzOTL/G+RyVzNeYu0yhRdplxY5LxOlZVEloYy3cRHMI/bnbf+TgkOOW8gAVALfHXCpAdre2CJ76aiziNdplyT/twRRWeUOwPiESViP1yITwe8//EmHt71tbHdFr8uYInNraQHbVLE1X31fSag05mqpydg4G X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(250305191791016)(180628864354917)(22074186197030); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(3231254)(944501410)(52105095)(149027)(150027)(6041310)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(20161123562045)(6072148)(201708071742011)(7699016);SRVR:BYAPR15MB2390;BCL:0;PCL:0;RULEID:;SRVR:BYAPR15MB2390; X-Forefront-PRVS: 06891E23FB X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6049001)(346002)(396003)(376002)(39380400002)(39860400002)(366004)(199004)(189003)(6306002)(11346002)(65956001)(8676002)(65806001)(230700001)(446003)(44832011)(50466002)(6666003)(6246003)(5660300001)(81166006)(3846002)(65826007)(81156014)(7736002)(6116002)(53936002)(476003)(66066001)(2616005)(486006)(64126003)(956004)(105586002)(16576012)(97736004)(25786009)(114624004)(31686004)(305945005)(478600001)(106356001)(186003)(68736007)(36756003)(16526019)(316002)(4326008)(575784001)(8936002)(77096007)(31696002)(26005)(58126008)(229853002)(59450400001)(386003)(52146003)(6486002)(2486003)(23676004)(86362001)(52116002)(76176011)(53546011)(2906002)(47776003)(2004002);DIR:OUT;SFP:1101;SCL:1;SRVR:BYAPR15MB2390;H:[10.0.0.110];FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWUFQUjE1TUIyMzkwOzIzOjNuQVpjMlloVDN5UERkcWE1K21VN1JlQmJZ?= =?utf-8?B?SlliRjlDRzFCNEU2ZGU5clpNQytFWXlLVVhYc2ZhdnpyTVk0ZWUycWlRR1VD?= =?utf-8?B?UnNWNkQ0RSs4dEpieENUSHRaRVcyR3RBMkN3SHpITFNjM0VIMkpGVmRMRDNT?= =?utf-8?B?TDNBTmlwTHVHd1QyNW5lU210Y0FSNmlJQVZJVmI2MldBakc0eUJBVjRWQTFu?= =?utf-8?B?TGlmRXlPOG8vWmdFS0hWaVpNR3NVVWF6b09QK2toZTJYb28rTG02OWp2NE5V?= =?utf-8?B?c3RsaWtWRWttYUkyZWU5SEdPY1FaWjdxUEZtdUo5VmxUdkV5eGkxb3VEd1Ba?= =?utf-8?B?QmtQODFJZTV0Z0VpbkQwbDRZOSs5eVg1cDNLVWxIemhrOWRUbzlhZ1hPangr?= =?utf-8?B?RTdoa1Y1RlMxSmZuMW1FcU1MRmhjVWxJRWh2bzQ0c0NCdVdDdER4K2hBR2Iv?= =?utf-8?B?LzI5T0M2VnBwQVNBcWJRTlZ6U2hqbFJBUlRPUFYvZGhuU1FZTGVqTG5FRFhK?= =?utf-8?B?ZVBWaEJkemZwejhXY2ZlS3BIMmhUb3FYRE0rQ2R6MjE0dmVKUmc4VDZ4Njg4?= =?utf-8?B?RzRycTBnK1pZN0MrcThtMEQ5d29lcVRkRWt4TmtlRlMwK2xrMDdiVFEyZ0ND?= =?utf-8?B?UXhRemhWVzFxVzJDdnZvcFlqNTZCMGpxQ1pwRVd4aFFCYnNLaFZFZm10RzVJ?= =?utf-8?B?azVtWk9jRVUwOXRqNzNyd2VqVU9GQjF6R0EyTzhiRk1BOTU1QXcwVGphQnJX?= =?utf-8?B?MjRLdXBueitzZW5TVzdMTWJqenBMUXVLTjUxUWVVbkpOTHQ4QVFDVkc1dUlK?= =?utf-8?B?NnpLWHp5WGJlYlZCbEp0WCthbFo5QlhFdENldVk0YTcxOUlKWGNxcUFrVGlX?= =?utf-8?B?MGVVY0VGZHltWkdMYjZWU2VKRWVsYVQ3SzNTTmdxUld0cGs3TnF5WTRPZ01j?= =?utf-8?B?ajlZdXlUSXdIVkxmMlJlbkFMKytPYzk0R2dpcFJYSHJsUlZpU081U3F2N0ZO?= =?utf-8?B?QStIdW1EVEs1aEl4cFE4dXFqOHdHN2diNzBROFNVanpaL3BOOE9QMHovV1R4?= =?utf-8?B?aCtBTHNFOGNzbUlodTQ3Y3lBdW1tQnFwUDl0MGtteE83d0dzYnlaNk9JOGdo?= =?utf-8?B?TVA2V0VEU2tVaUlZSVd0LzcyS3FKTDdWMGpycHFZZ2FUY3dtb3RqTitWYXF6?= =?utf-8?B?OHAxcUNOVzdxbTd5S0pYdDlSV3hYSGlTbXc3MHNkVEJReVpOa2lKTUJJZDJ0?= =?utf-8?B?MjBXM0FnelNYd2JWelhCMFpMeFk1aVJhN1BYK21sYUNQL3FPekI4dTc4TUp1?= =?utf-8?B?aldWQ1BqTjlyaUhvUDNxSno1RzRrY2N1aFJWaTIzSlZjcXpkbGR5NncvaDBz?= =?utf-8?B?bk1PQUh1dW90R21YbTB1c1NQcGhYU0RnMGU1V1IxUlFnakdUU0NGZjJxODdy?= =?utf-8?B?KzR3bDVIcGg0YzFFRUJlUVZ0RkhTMURnL3doNXFBQW5XN0JFZzhIV2dtbmpF?= =?utf-8?B?WlozTTdlZ3kwU3RMYnp4QlA1YlB0RnNrc2VhTk1kNHFIU1hJVW1WWlloTlRJ?= =?utf-8?B?WWkwMTZHVkR6ZFAwMkdpYWlXZnFGQWl2Uk8xSUlHcTAxTXJOQm5EMXpTS1Fr?= =?utf-8?B?RDJXcXVaQUQxeUo5eTMwUEVyaHF2QjEzaFQxcktvN2k4YkNwL1c1b21Wdlda?= =?utf-8?B?M1RGekllVU5zOUpuWFFHZ0FkeUlkemgxdy9YWkRXMjdXeXY2M3RtMk01WkdS?= =?utf-8?B?KzMyeDhGR2dBbThWbGU1N1loZWVUMWRtOTlXT3JkOGlmRXNURFdrZjBpV0Fa?= =?utf-8?B?c3l5RlI3ejBiWjZoMVRad1FvYTY5OWlMOGd6QkJFQzFCK0ZlZnVqVEpTdjRn?= =?utf-8?B?VkFmN1R2YWJ6MHdaTmVqRlRUc2FXek53ZGFBRjRuNHBucUtuVisreUJnTDVJ?= =?utf-8?B?MzFZSENuci9yQW1NenoyczlZVWdib1lCU3ZGUEY4dVJyTkJ2dTZ2dXFZd21R?= =?utf-8?B?eXN0bDI5bXp0RkRvZ0hBb3JKTHRtbWd5em42SDdOZmVZdkYzRVp3U3Zoc0RP?= =?utf-8?Q?RMJ9G0QMD1KUa4l6PZ5dVX/2C?= X-Microsoft-Antispam-Message-Info: D0Cpjkn8XUYDFWj7bQ2ddApxRFV6C4pLTSdGo3eBzzyagQ4Jrx+5ksOR0IWeFuREIz00tRf0BPi5/0kc5BKLsc5m94thZgZ6lCVBnQlHdS+yxrjESVdVrNR+NA9v9GcVtrWyP90AVzMzDSGEU+EjwA8SGcHWbgCVtYapJbU3HtYVELrnNYsXFGlZgh889Ai8 X-Microsoft-Exchange-Diagnostics: 1;BYAPR15MB2390;6:+2fqfjtXyXa9qzbEPDgUtzqGi0sIF34u8coTxZXeS3+CuzYfg6sf1jtT0aK7XK90M0kMbm/XpyTlEFvV3r/RdvgkcmgSXX+JWAhbGsnfC+rG1LwDJ/CS52q02EQ9tcz8ICKgLKVA6RpjvnJcXWjAN+VuTZST+VCGpsyWpMbdmCbiNDV3RSRfzTuvNEfvba45LvcNE7gsVBBUlq18ffUAVo6FewsA8yAGPzq2dIefSjh2x3lgOPxTmXS2I0PrCh9WNVusH13sKgOfK3MhobpR4wREXKSmtaHmDpKgoCqDI3Y3Paq9CwNchNJV+C2MCblExTsPcwoJnDFHnkbQ0kyq9kUake+f+ApFQW6zE1+H6fq6+QIDS/0+FPSbCDBql1+ZOC834m/39byKXGedu3Hrv+6tGVN/wKY+muY8HPingrrYTX9szZn47QWBUohJ4lSe+MSQjQTZdhjOPNeCaiGYmw==;5:oYFUSxZ4zSwbqOCtqW/SP1OpDRwtS7cOtL/jEMOT38Thw+KK5KyyQG+1MZCz0VLpIN6tuBYkIi23da2q+uZzu0sEjj3tWS1uBM0khYyb73ppempgRuU57Lm1lqANgTQh5c7jmcA6NPmg840cQ8KqDzy2hCo/vlS4K8YpM4ExSoA=;24:msxblsoXoL8MpVh9UBSLmnmJYTDoJh24bdyxBu+EiCP3m3DsoAVEOfXUNXdr093FCn8AwtzFdP3/zd6V+oIfe3LHAV/RFZoFzikCVv1KK+Q= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BYAPR15MB2390;7:hPlgwAlv+cmwl1UGLuVoiGPV7wRY0VdGAp4Kc6YUlIT958RxKYKlLm2lBvhGWFHjC6/D5mWyGvBD0x/FcK5STulFC55+CW3X0R923F8SvRlropSRg6VUn7k+Dfm60tSiwKEBRrvhAf7WHOHmUiCKsOYG/tEK8bvintplBRAWTtY5v57sGTIU0kJCYQKx0RZHZkWtDhSNUEHLiDYP/c4srTfglPqlvjg52UsODxw19OKwgtLWjgBnWKCHhMI4W7qO X-MS-Office365-Filtering-Correlation-Id: 02f3c59f-7a00-4320-1211-08d5c6ebe9f6 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 May 2018 11:44:48.1530 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 02f3c59f-7a00-4320-1211-08d5c6ebe9f6 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR15MB2390 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes X-SW-Source: 2018-05/txt/msg00842.txt.bz2 Hi Alan, LGTM, with some nits. On 2018-05-11 06:52 AM, Alan Hayward wrote: > Add a method for reading the SVE vector length using ptrace. This returns > 0 for systems without SVE support. > > Note the defines taken from Linux kernel headers in aarch64-sve-linux-ptrace.h. > See the covering email for details about this. Using ptrace to read the SVE registers (and the SVE register length) will work even for kernels that didn't have these macros? > There are multiple ways of expressing the vector length. Thankfully these are > all wll defined. I've added convertors for going from one to the other. > Hopefully this will help to prevent future confusion. Copyright 2017 -> 2018 in the new files. > > 2018-05-11 Alan Hayward > > gdb/ > * Makefile.in: Add new header. > * gdb/arch/aarch64.h (sve_vg_from_vl): New macro. > (sve_vl_from_vg): Likewise. > (sve_vq_from_vl): Likewise. > (sve_vl_from_vq): Likewise. > (sve_vq_from_vg): Likewise. > (sve_vg_from_vq): Likewise. > * configure.nat: Add new c file. > * nat/aarch64-sve-linux-ptrace.c: New file. > * nat/aarch64-sve-linux-ptrace.h: New file. > > gdbserver/ > * configure.srv: Add new c/h file. > --- > gdb/Makefile.in | 1 + > gdb/arch/aarch64.h | 17 +++++++++ > gdb/configure.nat | 2 +- > gdb/gdbserver/configure.srv | 1 + > gdb/nat/aarch64-sve-linux-ptrace.c | 52 +++++++++++++++++++++++++++ > gdb/nat/aarch64-sve-linux-ptrace.h | 73 ++++++++++++++++++++++++++++++++++++++ > 6 files changed, 145 insertions(+), 1 deletion(-) > create mode 100644 gdb/nat/aarch64-sve-linux-ptrace.c > create mode 100644 gdb/nat/aarch64-sve-linux-ptrace.h > > diff --git a/gdb/Makefile.in b/gdb/Makefile.in > index 87d74a7703..64042d1bd1 100644 > --- a/gdb/Makefile.in > +++ b/gdb/Makefile.in > @@ -1478,6 +1478,7 @@ HFILES_NO_SRCDIR = \ > mi/mi-parse.h \ > nat/aarch64-linux.h \ > nat/aarch64-linux-hw-point.h \ > + nat/aarch64-sve-linux-ptrace.h \ > nat/amd64-linux-siginfo.h \ > nat/gdb_ptrace.h \ > nat/gdb_thread_db.h \ > diff --git a/gdb/arch/aarch64.h b/gdb/arch/aarch64.h > index 1846e04163..af0b157c51 100644 > --- a/gdb/arch/aarch64.h > +++ b/gdb/arch/aarch64.h > @@ -48,6 +48,23 @@ enum aarch64_regnum > #define AARCH64_V_REGS_NUM 32 > #define AARCH64_NUM_REGS AARCH64_FPCR_REGNUM + 1 > > +/* There are a number of ways of expressing the current SVE vector size: > + > + VL : Vector Length. > + The number of bytes in an SVE Z register. > + VQ : Vector Quotient. > + The number of 128bit chunks in an SVE Z register. > + VG : Vector Gradient. > + The number of 64bit chunks in an SVE Z register. */ > + > +#define sve_vg_from_vl(vl) ((vl) / 8) > +#define sve_vl_from_vg(vg) ((vg) * 8) > +#define sve_vq_from_vl(vl) ((vl) / 0x10) > +#define sve_vl_from_vq(vq) ((vq) * 0x10) > +#define sve_vq_from_vg(vg) (sve_vq_from_vl (sve_vl_from_vg (vg))) > +#define sve_vg_from_vq(vq) (sve_vg_from_vl (sve_vl_from_vq (vq))) > + > + > /* Maximum supported VQ value. Increase if required. */ > #define AARCH64_MAX_SVE_VQ 16 > > diff --git a/gdb/configure.nat b/gdb/configure.nat > index 6b0f44fede..d7d79adaca 100644 > --- a/gdb/configure.nat > +++ b/gdb/configure.nat > @@ -228,7 +228,7 @@ case ${gdb_host} in > aarch64) > # Host: AArch64 based machine running GNU/Linux > NATDEPFILES="${NATDEPFILES} aarch64-linux-nat.o \ > - aarch32-linux-nat.o aarch64-linux-hw-point.o aarch64-linux.o" > + aarch32-linux-nat.o aarch64-linux-hw-point.o aarch64-linux.o aarch64-sve-linux-ptrace.o" Please wrap to 80 columns. > ;; > arm) > # Host: ARM based machine running GNU/Linux > diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv > index ffeefb9b92..8bf0dcc650 100644 > --- a/gdb/gdbserver/configure.srv > +++ b/gdb/gdbserver/configure.srv > @@ -54,6 +54,7 @@ case "${target}" in > srv_tgtobj="$srv_tgtobj arch/aarch64-insn.o" > srv_tgtobj="$srv_tgtobj arch/aarch64.o" > srv_tgtobj="$srv_tgtobj linux-aarch64-tdesc.o" > + srv_tgtobj="$srv_tgtobj aarch64-sve-linux-ptrace.o" > srv_tgtobj="${srv_tgtobj} $srv_linux_obj" > srv_linux_regsets=yes > srv_linux_thread_db=yes > diff --git a/gdb/nat/aarch64-sve-linux-ptrace.c b/gdb/nat/aarch64-sve-linux-ptrace.c > new file mode 100644 > index 0000000000..9381786fda > --- /dev/null > +++ b/gdb/nat/aarch64-sve-linux-ptrace.c > @@ -0,0 +1,52 @@ > +/* Common target dependent for AArch64 systems. > + > + Copyright (C) 2017 Free Software Foundation, Inc. > + > + This file is part of GDB. > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see . */ > + > +#include > +#include > +#include "common-defs.h" > +#include "elf/external.h" > +#include "elf/common.h" > +#include "aarch64-sve-linux-ptrace.h" > +#include "arch/aarch64.h" > + > +/* Read VQ for the given tid using ptrace. If SVE is not supported then zero > + is returned (on a system that supports SVE, then VQ cannot be zeo). */ Here, put a reference to the .h as usual. > + > +unsigned long > +aarch64_sve_get_vq (int tid) > +{ > + struct iovec iovec; > + struct user_sve_header header; > + > + iovec.iov_len = sizeof (header); > + iovec.iov_base = &header; > + > + /* Ptrace gives the vector length in bytes. Convert it to VQ, the number of > + 128bit chunks in a Z register. We use VQ because 128bits is the minimum > + a Z register can increase in size. */ > + > + if (ptrace (PTRACE_GETREGSET, tid, NT_ARM_SVE, &iovec) < 0) > + /* SVE is not supported. */ > + return 0; Add braces here. > + > + long vq = sve_vq_from_vl (header.vl); > + gdb_assert (sve_vl_valid (header.vl)); We should avoid gdb_assert for bad input values (including what we receive from the kernel). Could we display a warning and return 0? > + > + return vq; > +} > diff --git a/gdb/nat/aarch64-sve-linux-ptrace.h b/gdb/nat/aarch64-sve-linux-ptrace.h > new file mode 100644 > index 0000000000..b318150ac1 > --- /dev/null > +++ b/gdb/nat/aarch64-sve-linux-ptrace.h > @@ -0,0 +1,73 @@ > +/* Common target dependent for AArch64 systems. > + > + Copyright (C) 2017 Free Software Foundation, Inc. > + > + This file is part of GDB. > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see . */ > + > +#ifndef AARCH64_SVE_LINUX_PTRACE_H > +#define AARCH64_SVE_LINUX_PTRACE_H > + > +/* Where indicated, this file contains defines and macros lifted directly from > + the Linux kernel headers, with no modification. > + Refer to Linux kernel documentation for details. */ > + > +#include > +#include > +#include > +#include > + > +/* Read VQ for the given tid using ptrace. If SVE is not supported then zero > + is returned (on a system that supports SVE, then VQ cannot be zeo). */ zeo -> zero. > +extern unsigned long aarch64_sve_get_vq (int tid); > + > +/* Structures and defines taken from sigcontext.h. */ > + > +#ifndef SVE_SIG_ZREGS_SIZE > + > +#define SVE_VQ_BYTES 16 /* number of bytes per quadword */ > + > +#define SVE_VQ_MIN 1 > +#define SVE_VQ_MAX 512 > + > +#define SVE_VL_MIN (SVE_VQ_MIN * SVE_VQ_BYTES) > +#define SVE_VL_MAX (SVE_VQ_MAX * SVE_VQ_BYTES) > + > +#define SVE_NUM_ZREGS 32 > +#define SVE_NUM_PREGS 16 > + > +#define sve_vl_valid(vl) \ > + ((vl) % SVE_VQ_BYTES == 0 && (vl) >= SVE_VL_MIN && (vl) <= SVE_VL_MAX) > + > +#endif /* SVE_SIG_ZREGS_SIZE. */ > + > + > +/* Structures and defines taken from ptrace.h. */ > + > +#ifndef SVE_PT_SVE_ZREG_SIZE > + > +struct user_sve_header { > + __u32 size; /* total meaningful regset content in bytes */ > + __u32 max_size; /* maxmium possible size for this thread */ > + __u16 vl; /* current vector length */ > + __u16 max_vl; /* maximum possible vector length */ > + __u16 flags; > + __u16 __reserved; > +}; > + > +#endif /* SVE_PT_SVE_ZREG_SIZE. */ > + > +#endif /* aarch64-sve-linux-ptrace.h */ >