From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2077.outbound.protection.outlook.com [40.107.21.77]) by sourceware.org (Postfix) with ESMTPS id C5E223858D37 for ; Wed, 1 Feb 2023 10:10:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C5E223858D37 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Z7qfHKNH/H/kef82o2PhBJBuW8x4j8sZutSKe3pRDA8=; b=DbhkwjPOWOagV10USwJZDlBirBYJgo+LjaEfT3ARn6nMRNmXk369Vczo2LX49DtzosKeN4qCGM/xOin1RR/YDlmcQI2cb2OAg60RN5iIjyj2RLIHlDAn0vzd8dXtPj8empk82Yj5LjbVsECBk6gmbXVTEPeICuStp7KaqbSUk6g= Received: from DB6PR0802CA0032.eurprd08.prod.outlook.com (2603:10a6:4:a3::18) by DB4PR08MB10342.eurprd08.prod.outlook.com (2603:10a6:10:3fe::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.38; Wed, 1 Feb 2023 10:10:41 +0000 Received: from DBAEUR03FT004.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:a3:cafe::9) by DB6PR0802CA0032.outlook.office365.com (2603:10a6:4:a3::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.36 via Frontend Transport; Wed, 1 Feb 2023 10:10:41 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT004.mail.protection.outlook.com (100.127.142.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.24 via Frontend Transport; Wed, 1 Feb 2023 10:10:41 +0000 Received: ("Tessian outbound 8038f0863a52:v132"); Wed, 01 Feb 2023 10:10:41 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 55b0a13158a00c79 X-CR-MTA-TID: 64aa7808 Received: from 742f16bfc8d6.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 6C751361-AF19-4DB2-A94D-317160475F07.1; Wed, 01 Feb 2023 10:10:33 +0000 Received: from EUR04-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 742f16bfc8d6.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 01 Feb 2023 10:10:33 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=is0GZ1h9hFssGcJ8EMKbvTMoCuwxWPXY/GGiceGpJNLfr+V1tuLJYBOgj7sH1MhSXjboM/BhGbynYV8zRAEtB4qLCAG7/KwP0qWTwIeLxinLc+lgz1H6XqzefhlaWpxlXmB7kTDLjCz30Cv9Ql6dwZvznW/RsQdFf+/VrJaQiqE36c8MrI5mznBJP+J41PLq87eQDggH+52YzUQcX14eXefojZ18+926VWm2gDUHyib9UiYDoxzM3gOSlOuTmWhhgs0X82kaZ7664MhVhxSCxbmdjStA8ZjeDzDrpLIQXBQ2HamI/0hBWJ+lwnOEdlGvKoVU5b19zr7cwCLOT82ivg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Z7qfHKNH/H/kef82o2PhBJBuW8x4j8sZutSKe3pRDA8=; b=HwBFN9/fLpaDiVH8SQMGHiEjjYboNV9NaOpnqyPgDt1q2DCRKwbTV2aZjUmeqL0ndTIXS2DU5zUAih1ppAWPKxc/N+ZXZWRHwG37oS7ndDDD5lMB5alfCf73VIZ+64L2Y1dX/zkb/lnLJepVOlCr6391ljtkEnjDZiwQE+EHZc8Bwzh5R2eTIVW0Jr3ly+Wik497APMiMbQ1anymhhumeOBvamDpKVAoEDqJ06iScacDx2LloCY0YZebLa+Vw4hy1/CxCZjnW5wyde70WI56nhOT0pdWBvt3IQnrtfniG0sdaVh11aCammLy3qRc4CuafYIYQW9WtlXW+v7RAnBQfQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Z7qfHKNH/H/kef82o2PhBJBuW8x4j8sZutSKe3pRDA8=; b=DbhkwjPOWOagV10USwJZDlBirBYJgo+LjaEfT3ARn6nMRNmXk369Vczo2LX49DtzosKeN4qCGM/xOin1RR/YDlmcQI2cb2OAg60RN5iIjyj2RLIHlDAn0vzd8dXtPj8empk82Yj5LjbVsECBk6gmbXVTEPeICuStp7KaqbSUk6g= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI1PR08MB3919.eurprd08.prod.outlook.com (2603:10a6:803:c4::31) by DBBPR08MB6076.eurprd08.prod.outlook.com (2603:10a6:10:1f5::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.38; Wed, 1 Feb 2023 10:10:31 +0000 Received: from VI1PR08MB3919.eurprd08.prod.outlook.com ([fe80::bced:32a3:b77e:90a6]) by VI1PR08MB3919.eurprd08.prod.outlook.com ([fe80::bced:32a3:b77e:90a6%3]) with mapi id 15.20.6043.036; Wed, 1 Feb 2023 10:10:30 +0000 Message-ID: Date: Wed, 1 Feb 2023 10:10:28 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: [PATCH v3 8/8] gdb/testsuite: Add test to exercise multi-threaded AArch64 SVE inferiors Content-Language: en-US To: Thiago Jung Bauermann , gdb-patches@sourceware.org References: <20230130044518.3322695-1-thiago.bauermann@linaro.org> <20230130044518.3322695-9-thiago.bauermann@linaro.org> From: Luis Machado In-Reply-To: <20230130044518.3322695-9-thiago.bauermann@linaro.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: LO4P265CA0120.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2c6::7) To VI1PR08MB3919.eurprd08.prod.outlook.com (2603:10a6:803:c4::31) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI1PR08MB3919:EE_|DBBPR08MB6076:EE_|DBAEUR03FT004:EE_|DB4PR08MB10342:EE_ X-MS-Office365-Filtering-Correlation-Id: 50b0884e-5f94-40fe-0039-08db043c92ea x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: yW+5CXrbTMWD0BC+En05EAfmYg+x7PLfe7ksxcqoef4zuQ8oARGyX5V3Fg66anovh4yQU1GskFSXxNRwzP2y3+pmrc7IZ/69qv+KGD3OURz8vNxhnGfRS2piiqA6/kRfr70qrqZiY5cnwBKgfPN+54tDvPDPLTqLiSmROPPSA5Lfy4vcIdrTTn2SQfy3ByH6FuuWZobNnhfXG4aYdz5rltfwLLr5k5Z2MQgZWaUAqmcCMTuEmzX842qq6au3rhGTb8HBzBETozoKA6Fnq1h9YmjcwdQN5zzYVVYJtxGqdXkARinEtyZm8A9KBGqtBrrP1mmdh08KsvQkqAElErsFt+ER9AVy5S4riNVE7gU9JKd3tzLyNc0ivfuJwfAahJTSD1cp0Fdr+OnYTmUhPzPSwkceZVJoWseTUe1Uk5py6scn+u38D1v+puBEdF4JeYubupqKtRwT4plsZrj04qj7R2Q95HvJqmG0FFILESQtm0EVt641oTGTPUUxfmkdKgXmAcQgCpLSuS0piThmqoXBJMYq/rYThn209d7x1xGd9tVupv0H0HhofRnxSHwFOSoJmxe98nxZI326HGRVmpkBfaLqp0a94NGscNsAim0037Ds24BI7UGl9jNLNWACFmFOoyyXXXYO2933waFylZ+JfuI7RVevKNyjr6LbSf03qyGRAGIJ9sdv676AyJZyTF47uoVGowCSdjCk9SUzpjop/VEW8IxruLCFnzKkWhu8cd6YriCiIAFGiNMdZi2X+tyh24WguyiV1NtUJLZttRLSbp30z6sE52A2t3AQshP985g= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB3919.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(4636009)(366004)(346002)(39860400002)(396003)(136003)(376002)(451199018)(8936002)(316002)(6506007)(86362001)(53546011)(31696002)(38100700002)(2616005)(26005)(478600001)(6486002)(44832011)(36756003)(186003)(6512007)(5660300002)(2906002)(83380400001)(31686004)(41300700001)(66476007)(66946007)(66556008)(8676002)(2004002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6076 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT004.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: abc47215-2512-4835-2289-08db043c8c22 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BHMye0iWOonbAabw5ShmVTi0XgPjJ6xUXNqNyGtxrjLbGZICcztmav58yjJ+LJZ+qjsENgbm187avz0LhreDB7aYqL6hAYSlvKs5KktScLNre+r1LZUC4vNial+y3qt34vY2vK3MQFgDqrWhW3b7Wm8vQjiONx5l7CZpmvU4pJg+RkoyeZjxP+7cDQMzgdTiW3IlY/HSS8VSnJlkIBGSxlh4g1PGuXEqY3XCnqBTKfmo5qfixbi71P1XKGOd8wKjcMtCmgbI+PtUXe/FVSxTRVQi2br0yF5AzkhFzcU3BCu68oB3OP3WIwmLEP8lO09E+sVGe8UsqX1oFvLjKdXqJ+hF1wH13Rv9LWdMo5qbGTXrQEbgymzDSrjE20sJBTEDTfdsBiL0+GMQtRKMZDOHxVIsOHT/Uenr7pHLLBARalA3RBQsz65qD74To2PYmEo2V8gGmO32X6N0vKmjinxz0/uDXXfmBKctrwJ0ee9lPgFAAUAiEqwmyY7F+EhzR72V4NZLYDqlFg0eNZgYc+IIqT/vQD16/IZvVuZATPAszWZfr7wXSk5x18+Pm1gaM08zPzLayDkrN41K32mkjXl1DeROyqMJ2ssxsA05D77VL+mWKQsitNAnBcya5Eud/5UkOZiwUfmekZEzbnw+iQsvKdaJjnXlqBh9OCqlsbAUEoCKWnurH/3vCPR8Whoa+5PwYxsLPps9wXoOA1kr74ID+9JmAdHTkCbmeIGIsHkOJ+14xeYipmCbzAdCQZT4LZxNNZLFJuRR/+xgd5UzPj1whkh9bmtyGSonqMRvlREOPzE= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230025)(4636009)(346002)(136003)(39860400002)(376002)(396003)(451199018)(40470700004)(36840700001)(46966006)(336012)(31696002)(36756003)(70206006)(44832011)(478600001)(40460700003)(36860700001)(70586007)(83380400001)(8676002)(316002)(82740400003)(6486002)(6512007)(186003)(26005)(41300700001)(86362001)(6506007)(5660300002)(2616005)(47076005)(82310400005)(81166007)(356005)(53546011)(40480700001)(31686004)(8936002)(2906002)(2004002)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Feb 2023 10:10:41.2415 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 50b0884e-5f94-40fe-0039-08db043c92ea X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DBAEUR03FT004.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR08MB10342 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Just a nit. On 1/30/23 04:45, Thiago Jung Bauermann via Gdb-patches wrote: > This testcase exercises two scenarios with a multi-threaded inferior, one > proposed by Luis and another one proposed by Simon. > > In the first scenario, one of the inferior threads changes its vector > length and then hits a breakpoint. In the second one, the main thread hits > a breakpoint and then GDB switches to another thread. > --- > gdb/testsuite/gdb.arch/aarch64-sve-threads.c | 125 ++++++++++++++++++ > .../gdb.arch/aarch64-sve-threads.exp | 70 ++++++++++ > 2 files changed, 195 insertions(+) > create mode 100644 gdb/testsuite/gdb.arch/aarch64-sve-threads.c > create mode 100644 gdb/testsuite/gdb.arch/aarch64-sve-threads.exp > > diff --git a/gdb/testsuite/gdb.arch/aarch64-sve-threads.c b/gdb/testsuite/gdb.arch/aarch64-sve-threads.c > new file mode 100644 > index 000000000000..7fad77008da3 > --- /dev/null > +++ b/gdb/testsuite/gdb.arch/aarch64-sve-threads.c > @@ -0,0 +1,125 @@ > +/* This testcase is part of GDB, the GNU debugger. > + > + Copyright 2023 Free Software Foundation, Inc. > + > + 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 . */ > + > +/* Exercise AArch64's Scalable Vector Extension in a multi-threaded program. */ > + > +#include > +#include > +#include > +#include > +#include > +#include > + > +/* For one of the tests, the thread needs to sleep after setting the vector > + length. This variable is set by GDB. */ > +volatile bool should_sleep = false; > + > +/* Used to signal to the main thread that the additional thread's vector length > + was changed. */ > +sem_t vl_changed; > + > +/* Start routine for the additional thread. Sets a new vector length, sleeps if > + requested then restores the original vector length. */ > + > +static void * > +thread_function (void *unused) > +{ > + unsigned int vl; > + int rc; > + > + rc = prctl (PR_SVE_GET_VL, 0, 0, 0, 0); > + if (rc < 0) > + { > + perror ("FAILED to PR_SVE_GET_VL"); > + sem_post (&vl_changed); > + return NULL; > + } > + > + vl = rc & PR_SVE_VL_LEN_MASK; > + > + /* Decrease vector length by 16 bytes. */ > + vl -= 16; Is there an initial vector length set before we decrement it by 16? I'm wondering about a case where we already start with 16, and then we'd decrement the vector length to an invalid value. > + > + rc = prctl (PR_SVE_SET_VL, vl, 0, 0, 0, 0); > + if (rc < 0) > + { > + perror ("FAILED to PR_SVE_SET_VL"); > + sem_post (&vl_changed); > + return NULL; > + } > + > + /* Let the main thread continue. */ > + rc = sem_post (&vl_changed); > + if (rc != 0) > + { > + perror ("sem_post"); > + return NULL; > + } > + > + if (should_sleep) > + sleep (10); > + > + /* Restore original vector length. */ > + vl += 16; /* break here 1 */ > + > + rc = prctl (PR_SVE_SET_VL, vl, 0, 0, 0, 0); > + if (rc < 0) > + { > + perror ("FAILED to PR_SVE_SET_VL"); > + return NULL; > + } > + > + return NULL; /* break here 2 */ > +} > + > +int > +main (int argc, char **argv) > +{ > + pthread_t thread; > + int rc; > + > + rc = sem_init (&vl_changed, 0, 0); > + if (rc != 0) > + { > + perror ("sem_init"); > + return 1; > + } > + > + rc = pthread_create (&thread, NULL, thread_function, NULL); > + if (rc != 0) > + { > + perror ("pthread_create"); > + return 1; > + } > + > + /* Wait until the additional thread changes it's vector length. */ > + rc = sem_wait (&vl_changed); > + if (rc != 0) > + { > + perror ("sem_wait"); > + return 1; > + } > + > + rc = pthread_join (thread, NULL); /* break here 3 */ > + if (rc != 0) > + { > + perror ("pthread_join"); > + return 1; > + } > + > + return 0; > +} > diff --git a/gdb/testsuite/gdb.arch/aarch64-sve-threads.exp b/gdb/testsuite/gdb.arch/aarch64-sve-threads.exp > new file mode 100644 > index 000000000000..48197650e1de > --- /dev/null > +++ b/gdb/testsuite/gdb.arch/aarch64-sve-threads.exp > @@ -0,0 +1,70 @@ > +# Copyright 2023 Free Software Foundation, Inc. > + > +# 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 . > + > +# Test a multi-threaded binary that uses SVE and changes the SVE vector length > +# in the additional thread. > + > +if {[skip_aarch64_sve_tests]} { > + verbose "Skipping ${gdb_test_file_name}." > + return > +} > + > +standard_testfile > +if {[prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ > + {debug pthreads}] == -1} { > + return -1 > +} > + > +if ![runto_main] { > + return -1 > +} > + > +# Stop after the additional thread has changed its vector length. > +gdb_breakpoint [gdb_get_line_number "break here 1"] > +gdb_continue_to_breakpoint "break here 1" > + > +# If GDB and gdbserver don't agree on the thread's vector length, this command > +# will fail. > +gdb_test "print \$z0" " = {q = {u = {.*}}}" "print z0 register" > + Out of curiosity, what is the failure mode when gdbserver doesn't do the right thing. > +# Stop after the additional thread has restored its original vector length. > +gdb_breakpoint [gdb_get_line_number "break here 2"] > +gdb_continue_to_breakpoint "break here 2" > + > +# Test that going back to the original vector length doesn't confuse GDB or > +# gdbserver. > +gdb_test "print \$z0" " = {q = {u = {.*}}}" "print z0 register again" > + > +# Restart GDB to test a scenario where GDB switches to a thread that changed its > +# vector length but hasn't hit any breakpoints yet. > +clean_restart ${binfile} > + > +if ![runto_main] { > + return -1 > +} > + > +# Make the thread sleep after changing its vector length. > +gdb_test_no_output -nopass "set var should_sleep = 1" "make thread sleep" > + > +# Stop after the additional thread has been created. > +gdb_breakpoint [gdb_get_line_number "break here 3"] > +gdb_continue_to_breakpoint "break here 3" > + > +# The regexp accounts for two lines of output after the "Switching to thread" message. > +gdb_test_lines "thread 2" "switch to another thread" \ > + {\[Switching to thread 2 \(.*\)\]\r\n#0 [[:print:]]+} > + > +# Make sure everything is still fine. > +gdb_test "print \$z0" " = {q = {u = {.*}}}" "print z0 register in thread 2