From patchwork Tue Mar 14 03:18:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 19560 Received: (qmail 57936 invoked by alias); 14 Mar 2017 03:19:41 -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 56931 invoked by uid 89); 14 Mar 2017 03:18:25 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_SOFTFAIL autolearn=ham version=3.3.2 spammy=HCc:D*ca X-HELO: barracuda.ebox.ca Received: from barracuda.ebox.ca (HELO barracuda.ebox.ca) (96.127.255.19) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 14 Mar 2017 03:18:23 +0000 X-ASG-Debug-ID: 1489461501-0c856e65d5188acd0001-fS2M51 Received: from smtp.electronicbox.net (smtp.electronicbox.net [96.127.255.82]) by barracuda.ebox.ca with ESMTP id YIE31BGx6y7asaQ6 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 13 Mar 2017 23:18:21 -0400 (EDT) X-Barracuda-Envelope-From: simon.marchi@polymtl.ca X-Barracuda-RBL-Trusted-Forwarder: 96.127.255.82 Received: from simark.lan (173-246-11-162.qc.cable.ebox.net [173.246.11.162]) by smtp.electronicbox.net (Postfix) with ESMTP id 98DDB440E7E; Mon, 13 Mar 2017 23:18:21 -0400 (EDT) From: Simon Marchi X-Barracuda-Effective-Source-IP: 173-246-11-162.qc.cable.ebox.net[173.246.11.162] X-Barracuda-Apparent-Source-IP: 173.246.11.162 X-Barracuda-RBL-IP: 173.246.11.162 To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH 03/10] bsd-uthread: Use ptid from regcache instead of inferior_ptid Date: Mon, 13 Mar 2017 23:18:12 -0400 X-ASG-Orig-Subj: [PATCH 03/10] bsd-uthread: Use ptid from regcache instead of inferior_ptid Message-Id: <20170314031819.745-3-simon.marchi@polymtl.ca> In-Reply-To: <20170314031819.745-1-simon.marchi@polymtl.ca> References: <20170314031819.745-1-simon.marchi@polymtl.ca> X-Barracuda-Connect: smtp.electronicbox.net[96.127.255.82] X-Barracuda-Start-Time: 1489461501 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://96.127.255.19:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 2727 X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using global scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=8.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.37208 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-IsSubscribed: yes This is one of the rare to_fetch/store_registers implementations that will still rely (for now) on inferior_ptid (because of the memory read/write operations). We therefore have to add a save/restore of inferior_ptid. We'll be able to remove it when we make the memory operations accept the ptid as a parameter. gdb/ChangeLog: * bsd-uthread.c (bsd_uthread_fetch_registers, bsd_uthread_store_registers): Use ptid from regcache, set and restore inferior_ptid. --- gdb/bsd-uthread.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/gdb/bsd-uthread.c b/gdb/bsd-uthread.c index 20eecd3879..08b8f36969 100644 --- a/gdb/bsd-uthread.c +++ b/gdb/bsd-uthread.c @@ -290,9 +290,15 @@ bsd_uthread_fetch_registers (struct target_ops *ops, struct gdbarch *gdbarch = get_regcache_arch (regcache); struct bsd_uthread_ops *uthread_ops = (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data); - CORE_ADDR addr = ptid_get_tid (inferior_ptid); + ptid_t ptid = regcache_get_ptid (regcache); + CORE_ADDR addr = ptid_get_tid (ptid); struct target_ops *beneath = find_target_beneath (ops); CORE_ADDR active_addr; + struct cleanup *cleanup = save_inferior_ptid (); + + /* We are doing operations (e.g. reading memory) that rely on + inferior_ptid. */ + inferior_ptid = ptid; /* Always fetch the appropriate registers from the layer beneath. */ beneath->to_fetch_registers (beneath, regcache, regnum); @@ -309,6 +315,8 @@ bsd_uthread_fetch_registers (struct target_ops *ops, uthread_ops->supply_uthread (regcache, regnum, addr + bsd_uthread_thread_ctx_offset); } + + do_cleanups (cleanup); } static void @@ -319,8 +327,14 @@ bsd_uthread_store_registers (struct target_ops *ops, struct bsd_uthread_ops *uthread_ops = (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data); struct target_ops *beneath = find_target_beneath (ops); - CORE_ADDR addr = ptid_get_tid (inferior_ptid); + ptid_t ptid = regcache_get_ptid (regcache); + CORE_ADDR addr = ptid_get_tid (ptid); CORE_ADDR active_addr; + struct cleanup *cleanup = save_inferior_ptid (); + + /* We are doing operations (e.g. reading memory) that rely on + inferior_ptid. */ + inferior_ptid = ptid; active_addr = bsd_uthread_read_memory_address (bsd_uthread_thread_run_addr); if (addr != 0 && addr != active_addr) @@ -335,6 +349,8 @@ bsd_uthread_store_registers (struct target_ops *ops, request to the layer beneath. */ beneath->to_store_registers (beneath, regcache, regnum); } + + do_cleanups (cleanup); } static ptid_t