From patchwork Wed Mar 8 16:41:34 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 19483 Received: (qmail 118169 invoked by alias); 8 Mar 2017 16:42:06 -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 117378 invoked by uid 89); 8 Mar 2017 16:42:05 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.2 spammy=non-existent, indirectly, informed 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; Wed, 08 Mar 2017 16:42:03 +0000 Received: from ESESSHC015.ericsson.se (Unknown_Domain [153.88.183.63]) by (Symantec Mail Security) with SMTP id 59.73.31323.95430C85; Wed, 8 Mar 2017 17:42:01 +0100 (CET) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.63) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 8 Mar 2017 17:41:59 +0100 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 DB5PR07MB1717.eurprd07.prod.outlook.com (2603:10a6:0:12::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.961.8; Wed, 8 Mar 2017 16:41:56 +0000 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH 1/7] windows: Don't use current_thread for register fetch/store Date: Wed, 8 Mar 2017 11:41:34 -0500 Message-ID: <20170308164140.7281-2-simon.marchi@ericsson.com> In-Reply-To: <20170308164140.7281-1-simon.marchi@ericsson.com> References: <20170308164140.7281-1-simon.marchi@ericsson.com> MIME-Version: 1.0 X-ClientProxiedBy: MWHPR21CA0024.namprd21.prod.outlook.com (2603:10b6:300:6e::34) To DB5PR07MB1717.eurprd07.prod.outlook.com (2603:10a6:0:12::22) X-MS-Office365-Filtering-Correlation-Id: 42f5bb28-20ea-40a3-5481-08d46642096c X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:DB5PR07MB1717; X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB1717; 3:JiruQEK/EMZQH7tdErn2ysiTePB7RFE2h/dcIv0unbc4AyPW6NCAs1+6ZPtgGtRnQRCNF0qP6Haj8rgkUSmuGAemPg6t8WwRtl71sF3VI6kwnU6jIRRLSGH/VxAWIRZ5dotWmPbhfGhkpyP5lNAkkHEg7mkKqlF/Z9uV1l8XHaBYJhstsDQWkeGUwa9b6fg0A+W6RTEuOPvOPwjvjrb+B9QQ9YhTups9rfjgWGeY5Vc0JeRvdVvYe8Zzus51J4Lsq5FjpxfILLNfR0mGKdq4Ew==; 25:tuZXxak591xXpnH3x8+7V6z3/FmdYSDz1ztodYYVj9h1BmkzFDm5+oWT5Kx+CrOzhbIAjarpPLag7O6PF69Be7tPZ8L6DZd/LpV49J1jMTNAo1lMvygjWDMHPRkZAtqIcMl719ZAAfEqOwVPPgXT4hg0Bz5xupWDivqp9zmLBdYlAaKPtWg619HFiQvY5GshqVq1QqZSAgnhd9oGnilFanUS0eT65YJGWvvS2nhvBXNMVuXpi/0AJ9WGZjxX5OuGESNi05tcPBj6zSpWXnybsYOKvwfT3qbR2ckD60tnA7eUm1Z6GPzcEzSUtrDCPkwZcI/vvIn3ohVbUUrTSc6bNUmdVwMsBJs04XbDcC7yEhQt+99tQNTVghcazqgqnurHeqF4/LfxfcBOpBbaEAtL9x6p6K46N+FgKypuKHrV92ocFwSfyc3vGDhNIuc3db5DoOJo9G/5T49pagzRKbXv3g== X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB1717; 31:u47ajvwtACeffbjrqEvH6haZSR4vshZLd1SdcWu8kPxFhDS80TZ1Lue031UjOA2d/oIKLNBOsT5Q/uxO9GPjYA71G5G7czFwKhzL+pnWqaXSY7DNpQgszIBYjfDlwZOCB4MTOZ702c1S0n52FzAiAxdxZHaR5g4XG6fQKS4R9DlVGLQDmocYFZQ9lpCZuWmUmbJgzZ6pS8kHQywDzrX1knuv28LKj1NjQIznANrTStCsq5GyQwVOLpsKhLet6PpUXGzdDPjZeTq1BCmai+FA7Q==; 20:2qpYV4N8Bdp/qaE4Jn4gt6hu+R5KkSLAG7+AORHvV6wpxw7O+RqV1SRDMEviUE+PbAUIeRp/xw+S+RJ/ftVmnV2lMAUZ/+x3Hx0LtmIdDW8yLYLMQ6oOpIgZn8HqUyDgTvgdoETnVO0MPq/kP36vtcclYPzorU4T6TzGq5G8YPmv3zFr0yhBt5FhSCx5xu/q/T2ngvXpLxUv16W7Y0TAq8A1kec0fJ6UVdBVhEeh14m3JvDWUvEwHBtgS34VxT71YQxsJ9oKWEmNbCGk4kr0TpaTsXMLtZnB2N0I2kf6nSR2gEkQTuIub6OxG48AYnD+kM6GyQFjLWg9jdYzb9NYl8MvRsGiQqTVEbHGLidRfWZcSCO1SWqkV4QcPm9F5Up69rbvBVQKRHLYawl3VIPowK0ndRSckk8pOVw+6nzGjdHmvLSpmjQOvFMjoZdMDLMgdGkBOtba9GWSQOMB17PLG/btIPus45ydXh7WClwgYQMj+hN3LVNTW2BTnLe88Te2 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(20161123558025)(20161123560025)(20161123564025)(20161123555025)(20161123562025)(6072148); SRVR:DB5PR07MB1717; BCL:0; PCL:0; RULEID:; SRVR:DB5PR07MB1717; X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB1717; 4:0ysJD4z4JUD5kxR+9i9vmwPkaYPIcrKEEUp1c8869rjHOtp3fSiWZrAo9avhBo4l3vtfRnZ3Q3tbgU0EIym9DR7FY5j2J2QSUY0kSCoyravUHw4+p0JQ+f3JDk0xhTHHea50wYMbi6gOhqYUfiyUdSossdOhYXiUMfmkU1XOZCN8M+GHwPu7OoVd9peyJdAY8K2HBMz9di1lqfkaoL9uTX60lvgfbTXQTusb2NLVYDoLs9MWUkYXI7Wrf4fpyifuTbwYX/9hvxF2bF9pg7P6HAcL4BCcJDyFTym61Wfk2F7EuWkHZXNX4n1MMh5hJZ/o94oxOhL12ZLh+ZOmMj5e1UHihCTdoVb/sWyeSLtfghARwzChBH2rtW1cR5AXA/zT582Qh/hx1p1EjBJ5mFC8f2AjIfcTWG7WnfsxGSbs2NNMzD2f8rKiA43dQYR3V2/A8OzwsY/1NQd3SYHHN766ealPE5ZvNgH4HwQCjEHD38Er2JLVDdmhjVLC5O8LXBwAcvRzwACF9iNnk/onnvdTw3bVEkiXZL9G3z/uiZSWT8pwTz/QSFzGeiauyMJtbxOSRVTeTutkvStbbqZoXEtTb/KxiVFJJpG+ouxU1JpmHbM= X-Forefront-PRVS: 02408926C4 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(39450400003)(6116002)(107886003)(38730400002)(53936002)(5003940100001)(110136004)(48376002)(81166006)(8676002)(189998001)(76176999)(50226002)(6512007)(4326008)(3846002)(5660300001)(47776003)(50986999)(6486002)(6506006)(66066001)(2950100002)(6666003)(305945005)(36756003)(2351001)(2906002)(86362001)(575784001)(1076002)(33646002)(50466002)(7736002)(42186005); DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR07MB1717; H:elxcz23q12-y4.ca.am.ericsson.se; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB1717; 23:LptO8fNHnTmP6cRNN+1zsxe74P7i2hEu/5r23dDz+mL7YFvZUfwZcPKZxnicqkhj5GtUwucbssWHj4ZC0IQ/UxduZPBoRB0NH4Sl6lnEcQX8eA6H8w2+qiDbbAvKzkcMPmgyOrvbFit6OziAoyv5o6QA6qfepuNsnuQx7aoTjgXcokGAQGKqFn2k1XiLh0LPuvQp3Pgjotx/9Rp51//B/JfW49jEXgc6INkmU382v0fIekQjOM1LmiqObIZ66bqWDwopx+sIbdd1Lhpx7C0p+c+fWEbvkhXwyvtPWDHwGhB+8iQ4BrpfsQbrmiEYFwRTgiAavMiUESogmtAqWOt5FUVTJwVQVUF2T/UAZJaTgvCEomFcRYB0ULvylwRDBTUsFfIBLNHIa3Q4XTXJbz8issfGgRmgcNFb4l87dDQGkk3YPpkqA+IVQkRD64wklVL4P4jjGmZY1Kh7h721nTyNWhipRON2w/S3yrvopzhXPmz/LONmno8QmrzO8QqZGzvMl235itVuTR8ddn6KePg4vSSYl6PTZSASmp56QT0QPfVPLlNwFfXBoPrRfXHvkerkfVKmg8nn+YH09hQrpNLeaP0DtAZ+OZ9m0djinoAi5QvxlLXkBGkP021ybmzR/ftje/x4k/uHKeYx34R6d0QGc+uJsFQwiGvcfzdB7WXK+HrkfAkDb7BZ307rTIUtsu2ipp7bHtKaJwyygegImGvl0wEJKFe9dvIpKX1rpdcyr8TfVKoYyVIs8ZvSk8CE1J8dxCGdhtN66ELS+bijnTdhQRQHrB9KQvwhrMBbuPxOLXKqD1ZI6qKS95sWLvv8VaoJNCjswiJzfzIXoX9dDNfXterpydM4psRswCTGUcdtOgBJUZ3itRDVLuSFymbrUIf7oMyuW5h+0+bYqm2TtKtMLmryHiX37mkmnp17IEa37FST1sMiuMSEB9YLeFDETewV X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB1717; 6:mt8UfMhbxHzOfNE4+90XEI+WW33InalQnHAZNbj+OH7aXMJtAMuaocCYj6+Kowy+BcYEltVoAK3JkuueDu3reFu8P4ox2jxjObnOyYggfgZIGVw0HRf5YA8w2StyaG30hBnkxRE9Zjar65pdYvQjS2JRo9z9eNrgMF0BOVKdhXu+ZmWJqSw5ZKlYBmaXxFGH1/x85LD6BjoC+1egLt+l+LbcaNGtMa9ihk+XJLz1iy4oEU8sxYtHcLoS3yCREM3J4lxOpSXYLz3hPVIjqJnif7nJwwA74F/X/xgOTMXaj50Mi0ShL7AS5U2+CuAYoHkfNYhbXXhs8DRCT+CBvHXaIae7mINbaDouv1hEEtLZ5KyaTRHEFV5fkVtJ57XXbmVH7WS+XiKVP7F45j5cBu6TSQ==; 5:OQPj+wwDeEvrC2TqK1sOoVKuNjd5u0jSNGRhhPZafv8BcJoyc9BDKNsjWquV8d2/yv6wFt2NiUHM8CGUThRtLqxT5UyWXPTLIW19RHG8CsixrU6jHQkkOM/ODnm72B7KryUXd7cIBvB3jlOmFyyOYQ==; 24:wtq22SePZ69LjjNuuzdXJFkFZJhZD9lgk7O6Hp0VVRebL0m5Y7sD5zkOyRwDhAZ8kiYpmwK33WmdLGRdVsufz6UeBzF9HxPh5VQaqw6r+kU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB1717; 7:QCPeIR09e74rPZNq9eTfXSGkT+GLgxWy3P81jhq5A3WadDPdwy+DYVB29tIc9enX4BzfjTCy57SoRuNpQFy9sNTk4SAArtDZ0O7k0opPeZ0IApoF4h2+I/+csAr2OzZNVO+NUqGH6d9YpNBt+OgKVX0R15003n6f5QCHUwK90ais+2eVH47M/VG9M8CF16e1iy4v8ernh6p64nzDDkLcznCxGZZjPwmdUDc6olV6ai1jGnJUhV6j5Z7CS352KG3nvlRWTSw1s/RC/rfmrQW8tVmeQKeCICc519R7+7spKT7nvbRxa8oPIcVmdD8t5EC7j9fBIi1BMa552MOFmbpVFg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Mar 2017 16:41:56.9457 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR07MB1717 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes The windows_fetch_inferior_registers function sets current_thread then calls do_windows_fetch_inferior_registers, which reads current_thread. Instead of passing a parameter indirectly through a global variable, this patch makes the code pass the thread as a parameter. It will fit better with the following patches, which will pass a ptid to the register fetch/store target methods. I don't have access to a Windows development environment, so I couldn't even build-test this. Could somebody try it to make sure it doesn't break everything? gdb/ChangeLog: * windows-nat.c (do_windows_fetch_inferior_registers): Add windows_thread_info parameter and use it instead of current_thread. (windows_fetch_inferior_registers): Don't set current_thread, pass the thread to do_windows_fetch_inferior_registers. (do_windows_store_inferior_registers): Add windows_thread_info parameter and use it instead of current_thread. (windows_store_inferior_registers): Don't set current_thread, pass the thread to do_windows_store_inferior_registers. --- gdb/windows-nat.c | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index 9cc755f0d4..a177b38ea3 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -460,18 +460,15 @@ windows_delete_thread (ptid_t ptid, DWORD exit_code) } static void -do_windows_fetch_inferior_registers (struct regcache *regcache, int r) +do_windows_fetch_inferior_registers (struct regcache *regcache, + windows_thread_info *th, int r) { char *context_offset = ((char *) ¤t_thread->context) + mappings[r]; struct gdbarch *gdbarch = get_regcache_arch (regcache); struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); long l; - if (!current_thread) - return; /* Windows sometimes uses a non-existent thread id in its - events. */ - - if (current_thread->reload_context) + if (th->reload_context) { #ifdef __CYGWIN__ if (have_saved_context) @@ -480,14 +477,13 @@ do_windows_fetch_inferior_registers (struct regcache *regcache, int r) cygwin has informed us that we should consider the signal to have occurred at another location which is stored in "saved_context. */ - memcpy (¤t_thread->context, &saved_context, + memcpy (&th->context, &saved_context, __COPY_CONTEXT_SIZE); have_saved_context = 0; } else #endif { - windows_thread_info *th = current_thread; th->context.ContextFlags = CONTEXT_DEBUGGER_DR; CHECK (GetThreadContext (th->h, &th->context)); /* Copy dr values from that thread. @@ -503,7 +499,7 @@ do_windows_fetch_inferior_registers (struct regcache *regcache, int r) dr[7] = th->context.Dr7; } } - current_thread->reload_context = 0; + th->reload_context = 0; } if (r == I387_FISEG_REGNUM (tdep)) @@ -529,7 +525,7 @@ do_windows_fetch_inferior_registers (struct regcache *regcache, int r) else { for (r = 0; r < gdbarch_num_regs (gdbarch); r++) - do_windows_fetch_inferior_registers (regcache, r); + do_windows_fetch_inferior_registers (regcache, th, r); } } @@ -537,25 +533,25 @@ static void windows_fetch_inferior_registers (struct target_ops *ops, struct regcache *regcache, int r) { - current_thread = thread_rec (ptid_get_tid (inferior_ptid), TRUE); + windows_thread_info *th = thread_rec (ptid_get_tid (inferior_ptid), TRUE); + /* Check if current_thread exists. Windows sometimes uses a non-existent thread id in its events. */ - if (current_thread) - do_windows_fetch_inferior_registers (regcache, r); + if (th != NULL) + do_windows_fetch_inferior_registers (regcache, th, r); } static void -do_windows_store_inferior_registers (const struct regcache *regcache, int r) +do_windows_store_inferior_registers (const struct regcache *regcache, + windows_thread_info *th, int r) { - if (!current_thread) - /* Windows sometimes uses a non-existent thread id in its events. */; - else if (r >= 0) + if (r >= 0) regcache_raw_collect (regcache, r, - ((char *) ¤t_thread->context) + mappings[r]); + ((char *) &th->context) + mappings[r]); else { for (r = 0; r < gdbarch_num_regs (get_regcache_arch (regcache)); r++) - do_windows_store_inferior_registers (regcache, r); + do_windows_store_inferior_registers (regcache, th, r); } } @@ -564,11 +560,12 @@ static void windows_store_inferior_registers (struct target_ops *ops, struct regcache *regcache, int r) { - current_thread = thread_rec (ptid_get_tid (inferior_ptid), TRUE); + windows_thread_info *th = thread_rec (ptid_get_tid (inferior_ptid), TRUE); + /* Check if current_thread exists. Windows sometimes uses a non-existent thread id in its events. */ - if (current_thread) - do_windows_store_inferior_registers (regcache, r); + if (th != NULL) + do_windows_store_inferior_registers (regcache, th, r); } /* Encapsulate the information required in a call to