From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 86476 invoked by alias); 4 Apr 2017 18:33: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 86058 invoked by uid 89); 4 Apr 2017 18:33:02 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_PASS autolearn=ham version=3.3.2 spammy=identifying, tired X-HELO: sesbmg22.ericsson.net Received: from sesbmg22.ericsson.net (HELO sesbmg22.ericsson.net) (193.180.251.48) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 04 Apr 2017 18:32:57 +0000 Received: from ESESSHC003.ericsson.se (Unknown_Domain [153.88.183.27]) by (Symantec Mail Security) with SMTP id AA.EB.26215.7D6E3E85; Tue, 4 Apr 2017 20:32:56 +0200 (CEST) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.27) with Microsoft SMTP Server (TLS) id 14.3.339.0; Tue, 4 Apr 2017 20:32:54 +0200 Authentication-Results: sourceware.org; dkim=none (message not signed) header.d=none;sourceware.org; dmarc=none action=none header.from=ericsson.com; Received: from elxcz23q12-y4.ca.am.ericsson.se (192.75.88.130) by VI1PR07MB1728.eurprd07.prod.outlook.com (10.166.143.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1019.8; Tue, 4 Apr 2017 18:32:53 +0000 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH 2/2] Class-ify ptid_t Date: Tue, 04 Apr 2017 18:33:00 -0000 Message-ID: <20170404183235.10589-2-simon.marchi@ericsson.com> In-Reply-To: <20170404183235.10589-1-simon.marchi@ericsson.com> References: <20170404183235.10589-1-simon.marchi@ericsson.com> MIME-Version: 1.0 Content-Type: text/plain X-ClientProxiedBy: BN6PR03CA0031.namprd03.prod.outlook.com (10.175.124.17) To VI1PR07MB1728.eurprd07.prod.outlook.com (10.166.143.24) X-MS-Office365-Filtering-Correlation-Id: fce894e2-7cda-4f7e-029c-08d47b8901b7 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:VI1PR07MB1728; X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1728;3:6+4FrD63yd6Qo72BStuXfcXiHuVaQIfpEKOAirgylcpXnEk1wlW8uLZ4kfqD69fqmZ23SrNzS6Bc9sga6byZji5woLpgfbKG7A0K2/uBMoNaatgFk/spHIAfAwrJqyOzORkmZNOGQdZprn1DPVVqcfQZAQHrhle0yvkE/3VKEI6+4csJcoxt4Gag7ubRHRBM53qGB2L5JpLVLNRQ99pwHXt/O5aibN2XKSDQzhZSBxkB05eJge9Gm6ZBxJyRIVz810W5S4/twQC5q9edotooVuluWDSePb65A4YzPkLVe2ixPRbB6jlLzSkSOSmLyBpl/RvqJpOJfQSBod6GnbYF9Q==;25:/a6sODAA0lN7jqE2dZN0dvZMDVlhyM3Bovzz98z0DaHzl+Q2RijEvmbB2xOv9ocxz3ytoQa/0N2HsgguL8ter4XIJyK7Aq8LZOjpIAr4LPEwrRh1MjA1wQ4uv5vT6e9gDgg4NULfalZyOrXDKLiW8XD6QnoVgvojBFtHqVUleX7G74+l/dsbH9Io1/91V7AYKa5b2dobAk9LHkiTZl7mohss+g11vu0dAtnhIqAP/d9LTboDXW0pLSvwKxNCNx2Om23zrzuJ9IgUQtnsBNuTJnFuV1e66kKWHixzr85PiTNYxh9UoecAXPOsVf1s/AsHnX0XFi0AfPa2X3vUr5atJgbc+I3YIqmGIE6nJvHIMZ8xbJu9V6EpkpJw1G60HgACrOhPprX2PN8AsqbHxb0WtAbljZCqHANsbDVjmfrn4BjAXj//2GdvvDQTtU2pWG8vu4THv32uNsJmhrstaAB1rg== X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1728;31:xhRlB1NMvtlWxmZ3VDqNWBJFc979TKA5+sEMwlObBWqq5YLgArqXFHtnZLfbgeW9EVg44UhfravE3QH3oniszPLgKwhh2QaDJDaqSjTjCrVpECjKZxNeSoydFcPYjfQq8DR1rsr1p1US8gtrM4dYG56UeNEhZ5LSuUy0I0Pv0RAtG1JAtJgsEGUu0rAe3vlCh+yBaB0I9aEd8ALqvP4kVseUEkR9asjY4f4zOlTVtDRnfIK9Zvs37YBVSZJaWHMr;20:C64frI9yOqFUD3OQJCWGHScI5QKDPZwRdwZ6wnDsHUmJYZ10xZ70OwJ4O8Nh/vScVXIyQxF/TrNwFU22lKRkXhP9GarcwjkEsdMrHtXFRl1x+1i1I2v/9hl04GH+HmHH3IW2InKAt2YYaD4WSByS0gUNsY8ZO+yn0j1aJ+U2NqBZBo0p2tbLYrViWq9K7b/d/nbwqnmckmtCXAzLNWV3Ai71yp48wXdM1xL9pOWwn++neWJqbQbdGLzz/Wb+dIH3qekaiKgYW2Sjf1AISSh6oGjJd2gBGm8Xxp0oPvTGMBTn0gckxFNDut2akse0uJXMoam2ri0Fc+YqqqLaNxex6dSrVcTGb4FjLDnUQMQMrU4H8/mjesGlL1JK7PngKMn51C9mKdYxNspLa3aIt6ASRIhqiS5+iVumfNOP4SQ7onxe8Eu4wfP/cQR8XJ7sz5oTAOMUnUuwpCUcOKCgo5qjOlS2Iws7Z/2et1wYpf/wuSClJufhEBF/Poz+SIJ5f7vr X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(6041248)(20161123555025)(20161123562025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(20161123564025)(6072148);SRVR:VI1PR07MB1728;BCL:0;PCL:0;RULEID:;SRVR:VI1PR07MB1728; X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1728;4:ZZfkVQ0Xp7N0cTsIiVBkWPPM5jDHmtumYzBd5S9DjVu/pXvNlrGxL4/te34ZV2T8ZVBUuLPjfVcIqvtb1gIrV3TpJxNLzFrrlP1mOCIw356j+KqFIWJHGswOZ4IC4B2vq2ORbu6lvTDL2v3ntVU0YZU1ROVLYU/F5Kw7LdRjhYDzqNZ2nPgT7Qt3AKtT7BDj6fm726YhJdbedyfnxYUQDuFnWJyQHzhLByWQycwakLst2LbZ8DkgZoE2BVIXasOpv3uG1YL6YJdmpI2Ynh9QsK2hWzzd9xmTkWwQ3mk5CU89rEQ0NVVzSKRK9enXCpNw6CN2fIZLNA5VCYWD5J98xgqlI82SIf7887gm1t3kTzm3YPUx2fwhZ624AkK9yfCXr3PiIDNvR4RIyzJc01WVLNPb7ErwtIAzL3C9UGuQX8T72PIHMEhqRAXKfW5hp86noJTam6MY7xh3/FHzTVBtAU4LnI38Q5ZiijbcuRPD5/o3k+vy68+UZ4kXOActw36jQoX5lsgrZJx2f6oLhAfEQ0hwAzK9gnc+dc0of6TVrEKytvHL8a5PzXnLMZgwugwd5wHUQyr1aLXT0JY6PQ/hYJ/iWcTqvhfi5PNe7sCr5POZFvbAfCXuQkTzk41BFK+jLqFOiT39uXrNTnSCbFJPD+h1NBiKxoDNjIqsxKMbY4AJahBdSfIPkekXv8k5dpWbcqyZqkSs25sJdZwqeqW5rw== X-Forefront-PRVS: 0267E514F9 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(39860400002)(39450400003)(39840400002)(39850400002)(39410400002)(39400400002)(52314003)(54534003)(33646002)(36756003)(5003940100001)(2351001)(66066001)(6486002)(4326008)(107886003)(38730400002)(110136004)(42186005)(86362001)(50466002)(6116002)(6506006)(6666003)(2906002)(3846002)(48376002)(5660300001)(6512007)(53936002)(47776003)(2950100002)(6916009)(76176999)(1076002)(50986999)(8676002)(81166006)(25786009)(189998001)(50226002)(305945005)(7736002);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR07MB1728;H:elxcz23q12-y4.ca.am.ericsson.se;FPR:;SPF:None;MLV:nov;PTR:InfoNoRecords;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;VI1PR07MB1728;23:Iw8PM1AH/UqFfNUGopEn3wSA8pRTrbZ2fGcxVEWop?= =?us-ascii?Q?S28gf1pQTynGML0JZ5WAkW9+V5lro98nsNZOnIbrxlwhFinZJlk3KwNimahK?= =?us-ascii?Q?QnSbNBcwD6qbHnLZLoj7x7FGLgA/EXYm/OmHfH9U/Y/4c+teUgRt1nFX3jzn?= =?us-ascii?Q?mRaoavkHIYS5EWXcJFPWmilf3KIow4KTBSOQ92+a66k/UhbtrjIXfJDIyR4s?= =?us-ascii?Q?R390mhTFgq60djdq3aPt9gFvrf2lEYxZrjaWTwKUhxJJoxnNqLJNPhTwnx41?= =?us-ascii?Q?6oDbfoJ4sRF75vMh/VZeA0ebct1CcAqLLEBmIccZC1Ic3A0iywbRoU4v3Pro?= =?us-ascii?Q?Zap4r9qDYdgyYyy+rAjuNYgYBDpGGPvBRANX+M/QUVD93zFQA0gsA3H2d1rO?= =?us-ascii?Q?RGkIYKLC5arQhOudJlJhxIhI4LEXrg1/t4YF8gVx408XuXBO/Gr6ENOcbcTn?= =?us-ascii?Q?LuUD7bu2hQgTpA7WBK8Esrh/drlvvr17jHcktBUoqMsUO4T4D/MkOHpesxmZ?= =?us-ascii?Q?uK3QSYWVzpkpSYWa5P77frA2ZtdM5jyGa38e0XC1Q63r10e2COLYT9bqYTCq?= =?us-ascii?Q?JfxZZjZg/bJrZ9jJAAAgdlx1MhqX7PxFsRIUNm8pC0sJk2CDRMgax3UQgPrZ?= =?us-ascii?Q?U1E+aNNZn+DMoBFn+FB9b2mVP+3Odg1JHV1jx7go4ZzxUcegKH0bSPV4cl+9?= =?us-ascii?Q?JnE4r5fSQ3peTBUX38Q2A5hQjyfj5MsXS9VJHS18ItexV03mfdgDGCTipK1q?= =?us-ascii?Q?Z8bsBbobYSCJWZMJicU3u9bb211eipZsc7Xsp2tty0QqF8NM7CY5P2zGNUBT?= =?us-ascii?Q?C9hANNu1cWMJzUjfi9oP+k71d0awGoEYoaAl9UQ/MbA/NlUWnRaYM08YFJoU?= =?us-ascii?Q?omSDgLtTDBjBBGhnxprZHYSx36EKdKowEWWnx/b7xWBnJ0wR/ovz/OQsSG7i?= =?us-ascii?Q?omNWPovBLs4u3u1fy/fxQ9+6eXCQEhZVvZB9rwRABTwMkSrvvvaQOpRYAbb5?= =?us-ascii?Q?+FtGkAqIw2PUE2EtvFSD91nBCMIrgnGKGZTWlU6sWMTtxuRkPGNEs5BAQHIC?= =?us-ascii?Q?MfSSTkgOi67tQLNj6gtb2FKSoonxihwAgC9PkE5ljxRCyauAEjGHTbTKoiob?= =?us-ascii?Q?6mO3wRlwRv1szrvbaTgxUcZLr3m3dpM?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1728;6:hXmqgK8gKGLX1P1yBQTHoHre/559XbGYFElqkX6baIoJQA6G9BSuzjoVMyOnMo36TtG2OUSVBeVuye8S/3uOykhnxa3Ds4AgVtxC60++BK4tZJ0Z/a91SPcXp37RQt09Y8Mja/v4ZLv87VB2hRaNWisB9Zn0Y96mtPT27GhL+puIQnYaXBCty/Rsm01nKwI+kbe4ALxUvPqL7eKLPGXdILv6p1dHOrrsXTjyCDbn5rxi5Y/XIXpenskRcno8RL3GZpTfrSzbCXBePlKStDIaXq/83SlqMQ0Tncn9g7bKc5oDg3ISoPtFngUNpzqeFqA2MEbFh3/WFcdDMJxwxx1vk7Ne9caRX+F73XbgUfSoDSBcAnKxPEHfdCPWfXHf42Z74ZUrZCy9QZi1zBksCk7lBZ/AAtoU80yabHoQt1Iy9cT7Z8yjT15VArEwM9N52ES+iQEDZXgOIQ16pmjoLXgl/A==;5:3OcpxQJxBwod7wcMVXkWmdSHf2AooYiLH10grYlgq+DklNxpTmm4ygxI3JlwfwU4AUHGumko0qIRS1o/SA9TQ2RkOXAzau8cNwxgpsgnrvrluYgFOnJ6WwQddH2SGYc513o6+7PiGd7xCiojga5bfw==;24:caGZmhWYj7H68pOtXgkh27YgCedyezYeFNrGpuDGf7iudefmBWPigZ+02dqYzm37zfU1E5eG2AIErHyvkEtWO2gDopPsVTY4RoZdy9iGJ6Q= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1728;7:6sKupSjDfJQUPVW6dN5Z/iM3N+cj06dLqo8mhEi2gdvbskfvODmNNGKXLpFppKqbcRjdC3KQvnR+NdV2qrSgUOjIFYZMzq8gQWZI9RiEXT7unw8+HVRwYctgglQmdBkq3MT1w74+x3mU8DhUaQCDBnrbLhEAons21dQdJu9cp3dft3gDE7Szz3eGwUaXOO/hvsC7oK/osa69hHAN4ouDkTHgVeEQiBCOwjXkOX+sR82WvDfw7kfbFB4pxOMzFw+dxAVJBqTG13rDxwZ0UdQEOlQBLs/wNFEArcrJHXLnSEilRSTNNSST+pdJoCEYAL0VgRLpYth5NsxMI9cEZjhVtw== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Apr 2017 18:32:53.0515 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR07MB1728 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes X-SW-Source: 2017-04/txt/msg00050.txt.bz2 I grew a bit tired of using ptid_get_{lwp,pid,tid} and friends, so I decided to make it a bit easier to use by making it a proper class. Because ptid_t is used in things that aren't constructed, it is not possible to have a constructor. Instead I added a "build" static method, which maps well to the current ptid_build anyway, and ptid_t is basically just a plain old data type with read-only methods. The difference with before is that the fields are private, so it's not possible to change a ptid_t field by mistake. The new methods of ptid_t map to existing functions/practice like this: ptid_t::build (pid, lwp, tid) -> ptid_build (pid, lwp, tid) ptid_t::build (pid) -> pid_to_ptid (pid) ptid.is_pid () -> ptid_is_pid (ptid) ptid == other -> ptid_equal (ptid, other) ptid.is_null () -> ptid_equal (ptid, null_ptid) ptid.is_any () -> ptid_equal (ptid, minus_one_ptid) ptid.pid () -> ptid_get_pid (ptid) ptid.lwp_p () -> ptid_lwp_p (ptid) ptid.lwp () -> ptid_get_lwp (ptid) ptid.tid_p () -> ptid_tid_p (ptid) ptid.tid () -> ptid_get_tid (ptid) ptid.matches (filter) -> ptid_match (ptid, filter) I've replaced the implementation of the existing functions with calls to the new methods. People are encouraged to gradually switch to using the ptid_t methods instead of the functions (or we can change them all in one pass eventually). Also, I'm not sure if it's worth it (because of ptid_t's relatively small size), but I have made the functions and methods take ptid_t arguments by const reference instead of by value. gdb/ChangeLog: * common/ptid.h (struct ptid): Change to... (class ptid_t): ... this. : New static method. : New methods. : Rename to... : ...this. : Rename to... : ...this. : Rename to... : ...this. (ptid_get_pid, ptid_get_lwp, ptid_get_tid, ptid_equal, ptid_is_pid, ptid_lwp_p, ptid_tid_p, ptid_match): Take arguments as references. * common/ptid.c (null_ptid, minus_one_ptid): Initialize with ptid_t::build. (ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_tid, ptid_equal, ptid_is_pid, ptid_lwp_p, ptid_tid_p, ptid_match): Take arguments as references, implement using ptid_t methods. gdb/gdbserver/ChangeLog: * server.c (handle_v_cont): Initialize thread_resume::thread with null_ptid. --- gdb/common/ptid.c | 62 +++++++++++----------------- gdb/common/ptid.h | 109 +++++++++++++++++++++++++++++++++++++++---------- gdb/gdbserver/server.c | 4 +- 3 files changed, 114 insertions(+), 61 deletions(-) diff --git a/gdb/common/ptid.c b/gdb/common/ptid.c index b56971b9af..ca51a4ec7d 100644 --- a/gdb/common/ptid.c +++ b/gdb/common/ptid.c @@ -22,20 +22,16 @@ /* See ptid.h for these. */ -ptid_t null_ptid = { 0, 0, 0 }; -ptid_t minus_one_ptid = { -1, 0, 0 }; +ptid_t null_ptid = ptid_t::build (0, 0, 0); +ptid_t minus_one_ptid = ptid_t::build (-1, 0, 0); + /* See ptid.h. */ ptid_t ptid_build (int pid, long lwp, long tid) { - ptid_t ptid; - - ptid.pid = pid; - ptid.lwp = lwp; - ptid.tid = tid; - return ptid; + return ptid_t::build (pid, lwp, tid); } /* See ptid.h. */ @@ -43,81 +39,69 @@ ptid_build (int pid, long lwp, long tid) ptid_t pid_to_ptid (int pid) { - return ptid_build (pid, 0, 0); + return ptid_t::build (pid); } /* See ptid.h. */ int -ptid_get_pid (ptid_t ptid) +ptid_get_pid (const ptid_t &ptid) { - return ptid.pid; + return ptid.pid (); } /* See ptid.h. */ long -ptid_get_lwp (ptid_t ptid) +ptid_get_lwp (const ptid_t &ptid) { - return ptid.lwp; + return ptid.lwp (); } /* See ptid.h. */ long -ptid_get_tid (ptid_t ptid) +ptid_get_tid (const ptid_t &ptid) { - return ptid.tid; + return ptid.tid (); } /* See ptid.h. */ int -ptid_equal (ptid_t ptid1, ptid_t ptid2) +ptid_equal (const ptid_t &ptid1, const ptid_t &ptid2) { - return (ptid1.pid == ptid2.pid - && ptid1.lwp == ptid2.lwp - && ptid1.tid == ptid2.tid); + return ptid1 == ptid2; } /* See ptid.h. */ int -ptid_is_pid (ptid_t ptid) +ptid_is_pid (const ptid_t &ptid) { - if (ptid_equal (minus_one_ptid, ptid) - || ptid_equal (null_ptid, ptid)) - return 0; - - return (ptid_get_lwp (ptid) == 0 && ptid_get_tid (ptid) == 0); + return ptid.is_pid (); } /* See ptid.h. */ int -ptid_lwp_p (ptid_t ptid) +ptid_lwp_p (const ptid_t &ptid) { - return (ptid_get_lwp (ptid) != 0); + return ptid.lwp_p (); } /* See ptid.h. */ int -ptid_tid_p (ptid_t ptid) +ptid_tid_p (const ptid_t &ptid) { - return (ptid_get_tid (ptid) != 0); + return ptid.tid_p (); } +/* See ptid.h. */ + int -ptid_match (ptid_t ptid, ptid_t filter) +ptid_match (const ptid_t &ptid, const ptid_t &filter) { - if (ptid_equal (filter, minus_one_ptid)) - return 1; - if (ptid_is_pid (filter) - && ptid_get_pid (ptid) == ptid_get_pid (filter)) - return 1; - else if (ptid_equal (ptid, filter)) - return 1; - - return 0; + return ptid.matches (filter); } diff --git a/gdb/common/ptid.h b/gdb/common/ptid.h index 337bfb0899..c8649ae9a8 100644 --- a/gdb/common/ptid.h +++ b/gdb/common/ptid.h @@ -20,6 +20,15 @@ #ifndef PTID_H #define PTID_H +class ptid_t; + +/* The null or zero ptid, often used to indicate no process. */ +extern ptid_t null_ptid; + +/* The (-1,0,0) ptid, often used to indicate either an error condition + or a "don't care" condition, i.e, "run all threads." */ +extern ptid_t minus_one_ptid; + /* The ptid struct is a collection of the various "ids" necessary for identifying the inferior process/thread being debugged. This consists of the process id (pid), lightweight process id (lwp) and @@ -32,27 +41,85 @@ thread_stratum target that might want to sit on top. */ -struct ptid +class ptid_t { +public: + static ptid_t build (int pid, long lwp = 0, long tid = 0) + { + ptid_t ptid; + + ptid.m_pid = pid; + ptid.m_lwp = lwp; + ptid.m_tid = tid; + + return ptid; + } + + bool is_pid () const + { + if (is_any () || is_null()) + return false; + + return m_lwp == 0 && m_tid == 0; + } + + bool is_null () const + { + return *this == null_ptid; + } + + bool is_any () const + { + return *this == minus_one_ptid; + } + + int pid () const + { return m_pid; } + + bool lwp_p () const + { return m_lwp != 0; } + + long lwp () const + { return m_lwp; } + + bool tid_p () const + { return m_tid != 0; } + + long tid () const + { return m_tid; } + + bool operator== (const ptid_t &other) const + { + return (m_pid == other.m_pid + && m_lwp == other.m_lwp + && m_tid == other.m_tid); + } + + bool matches (const ptid_t &filter) const + { + /* If filter represents any ptid, it's always a match. */ + if (filter.is_any ()) + return true; + + /* If filter is only a pid, any ptid with that pid matches. */ + if (filter.is_pid () && m_pid == filter.pid ()) + return true; + + /* Otherwise, this ptid only matches if it's exactly equal to filter. */ + return *this == filter; + } + +private: /* Process id. */ - int pid; + int m_pid; /* Lightweight process id. */ - long lwp; + long m_lwp; /* Thread id. */ - long tid; + long m_tid; }; -typedef struct ptid ptid_t; - -/* The null or zero ptid, often used to indicate no process. */ -extern ptid_t null_ptid; - -/* The (-1,0,0) ptid, often used to indicate either an error condition - or a "don't care" condition, i.e, "run all threads." */ -extern ptid_t minus_one_ptid; - /* Make a ptid given the necessary PID, LWP, and TID components. */ ptid_t ptid_build (int pid, long lwp, long tid); @@ -61,27 +128,27 @@ ptid_t ptid_build (int pid, long lwp, long tid); ptid_t pid_to_ptid (int pid); /* Fetch the pid (process id) component from a ptid. */ -int ptid_get_pid (ptid_t ptid); +int ptid_get_pid (const ptid_t &ptid); /* Fetch the lwp (lightweight process) component from a ptid. */ -long ptid_get_lwp (ptid_t ptid); +long ptid_get_lwp (const ptid_t &ptid); /* Fetch the tid (thread id) component from a ptid. */ -long ptid_get_tid (ptid_t ptid); +long ptid_get_tid (const ptid_t &ptid); /* Compare two ptids to see if they are equal. */ -int ptid_equal (ptid_t ptid1, ptid_t ptid2); +int ptid_equal (const ptid_t &ptid1, const ptid_t &ptid2); /* Returns true if PTID represents a whole process, including all its lwps/threads. Such ptids have the form of (pid,0,0), with pid != -1. */ -int ptid_is_pid (ptid_t ptid); +int ptid_is_pid (const ptid_t &ptid); /* Return true if PTID's lwp member is non-zero. */ -int ptid_lwp_p (ptid_t ptid); +int ptid_lwp_p (const ptid_t &ptid); /* Return true if PTID's tid member is non-zero. */ -int ptid_tid_p (ptid_t ptid); +int ptid_tid_p (const ptid_t &ptid); /* Returns true if PTID matches filter FILTER. FILTER can be the wild card MINUS_ONE_PTID (all ptid match it); can be a ptid representing @@ -91,6 +158,6 @@ int ptid_tid_p (ptid_t ptid); case, only that thread will match true. PTID must represent a specific LWP or THREAD, it can never be a wild card. */ -extern int ptid_match (ptid_t ptid, ptid_t filter); +extern int ptid_match (const ptid_t &ptid, const ptid_t &filter); #endif diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 4bc7f71b00..1287114cc1 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -2654,7 +2654,9 @@ handle_v_cont (char *own_buf) char *p, *q; int n = 0, i = 0; struct thread_resume *resume_info; - struct thread_resume default_action = {{0}}; + struct thread_resume default_action = { + .thread = null_ptid, + }; /* Count the number of semicolons in the packet. There should be one for every action. */ -- 2.11.0