From patchwork Wed Mar 8 16:41:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 19488 Received: (qmail 124107 invoked by alias); 8 Mar 2017 16:42:25 -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 123839 invoked by uid 89); 8 Mar 2017 16:42:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.6 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=beneath X-HELO: sesbmg23.ericsson.net Received: from sesbmg23.ericsson.net (HELO sesbmg23.ericsson.net) (193.180.251.37) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 08 Mar 2017 16:42:09 +0000 Received: from ESESSHC007.ericsson.se (Unknown_Domain [153.88.183.39]) by (Symantec Mail Security) with SMTP id 7F.53.32680.E5430C85; Wed, 8 Mar 2017 17:42:06 +0100 (CET) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.39) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 8 Mar 2017 17:42:05 +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:42:04 +0000 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH 6/7] Pass ptid to target_store_registers Date: Wed, 8 Mar 2017 11:41:39 -0500 Message-ID: <20170308164140.7281-7-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: 75b30521-a2ac-4522-ecab-08d466420dad X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:DB5PR07MB1717; X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB1717; 3:90fYw+Z8rJRDD3rUjHed55/wHGgieRLSHU+HA8qZpbc4Z4HVzzO8fFxgQuwHMffO7s0l7tBKtORXemmPvYSk6MbyEHzvGqDBcbEpb9ADE+k4sEOCeJJqpj2bXPnymlMAr2Z0iC/VG8cu+qwvmqWuz9PlCgjgjWPSCUzNuGVeCrN5MsYlN6Ozhkjp0dIQQ0A+oTjvMuuNx99rT3qVhtIlWKE4XgrdfXbTfZFkuCMW9Rz8DIdaRUjS5Kct4TdkWMVVm0oOkjD/lwB6VDDKj4LCsA==; 25:2SG4TMriWbDZg/GCfX9cWusfUi/tAwmcGOdNmPOZgIDq74X0DBvnKl62EbOAfQ20RPjdCicisLA8S3MiWLEBWKnu+pKY3NU5aQR0akdoURw9ojA9Jp6H7DwYo4D42XYtSVo+j1IQtU9fnt5/Pc1aM/JNNL7EgtcFQWNYcvE/BCs/BIdzFGdwJY54+kbwSis3jE/mOpUo8PC36ojb2lWkVxPcv02KBi8Qe2Xhl1nFlD9d6sWGTDFWF+Sbi7+dSzonH9RBlS9cPXF5LMUPFHUH9ZJJg30jMePjfCqLfCiE8SV9bk3tx5BWky3XFVAGfCsBG+oY/hrlxcqGNm6zg5zROnYzmQXMIz7uo+MzOJD1JckScO1/ZxMMP0FVQKI1FuX1PJ42PoPiosbYqUC502zjzdOI0vDRxNaFgRbOBAwLNNq8a/tmKfBI5oOhk0/cHtj+VnDZp848YUoF5ZepEJshTg== X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB1717; 31:GMiI+zlFdP1cgZ5Id1Y/P4Xt/UGj2H69mDeGKWPyLSn61PvAQ7uL46+LpMI7wyMFSjCMUoKmMMbaaMe6axYwaIxPsVYtPJzV5M1wuQfpsjqwG/a7eorKVvIW/IQvocKy96H48XqxYbu6uI53GkG5Edwdo9oMueU9HqGmYbMyNLzjpNK/mwn1hrRtS6bdIh339kUYdmg3KDm/xphJLIbM4KnsQamYpsdQHmarUNvg9yE=; 20:xTctewCRHGIAwjLDNoO/9xd/9iNy2KlLt5LY01YmV2RNJeQH0Mb7Y4Bsg5KHyYlBaKG5oQox+GnOSTvwww5QH8W/JxA4vV+f+kRdAxxLA2Dq1JFowgQUeeoxB/ftMrVNoBQEkEtq4jqggKoC0UbT3YCrbBVgFxOjIW1lf7hE+8BCITrVjyKhqG+AY8PzN9LJX1LNGJP5mSSVCuoa5sALBM933g/racHseSTGiZvZ2tOAz2+qXnkGtIzixSWmVVbudQL0nFgiSDd6IY12pqJAZQ7DPvMDm83wtOHC4r3Fw8CP2zxs0VFZS8bHrBtLa4eTfGUT29W/zzoF2DyIamPOGW/Z5OC38dKDucd8Dhfbn1sYeI5Ek+WcaQ769fDFO+DuijRwIw6UspjkDzsRzkux3SKPQeuLwXvI7kKJltEMEZ7xi9Kvn03sHPWmEUOrJa/tYTb/g80rX5C70LfDdYM83jCQae6M9BJHJOPOPHd5GEoDTxPOqKLYHs2g3RpaO+mo 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:MHvFB+Rh9mMnpCcA07zFhLZT/rGlGQns1ZFLFnZLBBtMKy6FRR4Se9uRRmpVV2GYMIK3xbQSo+IU6BtTYl2HMN0KjeW9zVwJNVzaI8nVGFt/awrezi7B70eYfIhPB/5kz4IpDkA/7ScadDv7AkZCBsBkw2ICgDuS/VAzZX+ehxhiZrVKN9tq39fzA9ytcLmFdNmYVyWjW0lqjZQPlyelVqDqrTD4X6Fvi7AjTlGX3pyYg4b0LfwOpCqKHsXZNjZmBKNiCXlRhkV6MCIyalM8Z1iny+ulG1VXCuOrpzbP0HfQ+lAusrT+5xQK4byHytYk4Kmky+AHNmeTxXisgMjwKGWXTXUrEwmKltNahE23annOio5r97wvldgMOC56Siv11Bv+C+i1wt7Bt/4soeZWNgG1oW/VdrIVfvWEnxcMA0PMXFvCAo7AJlkkcijl6TZ7dsaHtg7zBKyCevSQVGjg2LPrj7hulw0buZJu65DfeMhxYv9WyqkJJdIDbqlNAmefCphNkvTUm0CnfizaN0vXbw5SZVvgOOzhz4h24H99bKtZro10SrAsa7cmLYXa3YuwFkiuRoRoTd7+bPPcoGxaeEqGqIoNb/qKGqVeClP4is0= 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)(53946003)(3846002)(5660300001)(47776003)(50986999)(6486002)(6506006)(66066001)(2950100002)(6666003)(305945005)(36756003)(2351001)(2906002)(86362001)(575784001)(1076002)(33646002)(50466002)(7736002)(42186005)(559001)(579004); 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: =?us-ascii?Q?1; DB5PR07MB1717; 23:6pbq9+V9hoPJUluMQWjaaLIxeiVTLHvHAh4+G6LFy?= =?us-ascii?Q?MoVRldSPvQoB8xOiVFzFIByhDE9sSXbSg6bBTJATPjL8dcKBCNotwZf5U08s?= =?us-ascii?Q?ChNxMWdqOEP/aLhbiEeS6eqOgc1DLEIs761Rv+d/pNSbQeInjkHBGRn8Utld?= =?us-ascii?Q?0ipUSoTjuSX/3wQ6YpB4UyWDIkK7xftt1mhJoEHyne5YKR+eqxrKbAxKQOyq?= =?us-ascii?Q?Zj/rgrz05HuoZPPofsWn8k/qBJgrFFoYNgBsSVtMj192Whr7eGNDLOUMDOX+?= =?us-ascii?Q?bmUslEyxSf7pExxHHpOA/0jrY/e+9P1m9Us7AmzAjy5WksBX0DqhHjMqhFn5?= =?us-ascii?Q?44zuhXe1wp9L9c/SVYedNCsguHY9psOFL5WjVb2YFNtFGlLAPpiUE6BXROst?= =?us-ascii?Q?wMHZgtGqfTf20UlhEKAgtYVZb3J4Z9QfY1yExxWkE8aGMRiAMd1rcazjwgn/?= =?us-ascii?Q?V4CzZRfhbFpLH/6L/PcjpXAlOS0F8cPaNBpNAqK/5Y+phD36VLgoQhhKCXZ8?= =?us-ascii?Q?nZYEvkGyXVqjZHg1slLnOact+s2k8i0TP2gcRumwekHI2U7bI9tuN81sohq2?= =?us-ascii?Q?dPXtxoynFSNnDvF3F8Wg3tQC8gSJ5A7VbXCFaJ0o3juWvRxps116rrhrYVqz?= =?us-ascii?Q?tdj1YrIA6oGXb/T5tv/fWSRQQEUBADgFoKjcNL/OSxiDqRHdKCcw9yNmIqxC?= =?us-ascii?Q?NMYwRRo3aUFaNTTCO5z84jCre1uhyneALbqunPgNDOtTQLN8QUKzYuZm9fAN?= =?us-ascii?Q?MDIy0BefkqpHRI685mIH+B6rziTJj1RihG0NNfjoc5nRhx4OUkfjFFGoFd0n?= =?us-ascii?Q?JuZNxihKl7S/embUe1NIneqqdyEgsMNrNuiaIACnk4PdvwecqmwOv0wQGC2g?= =?us-ascii?Q?2MwLpCnUnmAPiIRPcO1JLmbvPR3C88mieFBluD6wM5Pmrh195TWWVAgdUfSr?= =?us-ascii?Q?+VjyPiR9tY0vJlDOD4yxn7oZfepNoWLySiPhA4pq9DQ3waNi9fJWL1HfXvZN?= =?us-ascii?Q?6o=3D?= X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB1717; 6:SIVOht4t2cpnn3eXcd8lD3dH246dhnpAaTc/hLl5VXeYgiT5XU3J/sq8vteKDiFJTETyuIdwNVnWFdk+u3FiQFiVNwCc16eKJbKqWYnDpMbp9ZmtAkmQrt0/bpnD8oy1cpzWJUq3pL3AT6qDmPYMoLQ+BRD24lXr4z7LzYh8ZnLTmH3ess6UA9EIlFd2niSe7xXIdpjCp7+JRWEG8zf7D1QaNzcMjvdtyFbrmLb/k0rlQovTKHyJzdDHN5mBpjXkgrETMhUly1TryUiYs4ez75vrDXW4Yzz5M+BFV3fhGylERnTwmz9Nv5nedvEbjnzl87smFgVq/VQ+sZmyKngWEz4XcopShIcWgyyZ46ZKikBAcdhe9WNTOdWk6uZJ5Y/Sdz1C0L70OPmF+53X7AYwUQ==; 5:k/0Isk3zAr1LtE7Zd+HQxPZm6iuPhRXnUThEUMyOo8Nv4n6bkdA17AwQZaJvofJxFG8+8nmKz0RIstpBGIHaM8lmlgw1Gfz1LhRdtoqA+cjsjcNPMcCCaqrWFPUo8yO4PFhUyYOBPfb3S4XQO0VtQA==; 24:l9QxzVrJzrurXFDL5yBu0V2FJA7B5c93yhT+mDAyMupmJtknt+gHMQMJDL3LYGZCN1mld3+gLzWFPtwAlQaHG4j/Del6lZvh/rglEhoL8A8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB1717; 7:9gVS05LNePagpOEIs4XHOcdjHLSvQbCumviRE/CaDxZLj2QEF10qU2rKDua5Tp88IMTF/eE+1+mp7+hpp7q8JYP5nczSYP/mUBFExMPMBjfbOH5w96AJpJESAb3OBTv4UBp8tCsoOafjCjE8TcT8qcCKJ0M5ZN0yshwVmpNl331uAO7Ke8ZNxY7LSz2qg0jrO3Z+6bxs90p+JzcZ/L0E8I+0r+w2ITvJxtqwBizj6Sfc8fjoeFZZ7dcijjKnuncPYMBru8Pnd+PjkholFkxWRdKVC5aazQla4ydVk9nbuDozhM9mawImwPYfJ2Ed50RHf6eokUp+q5wKTgT99ePM2g== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Mar 2017 16:42:04.1021 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR07MB1717 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes This patch adds a ptid parameter to the target_store_registers function and the to_store_registers method of target_ops. The implementations are therefore expected to rely on this and not on inferior_ptid. gdb/ChangeLog: * target-delegates.c: Re-generate. * target.h (struct target_ops) : Add ptid parameter. (target_store_registers): Likewise. * target.c (target_store_registers): Likewise. * aarch64-linux-nat.c (store_gregs_to_thread, store_fpregs_to_thread, aarch64_linux_store_inferior_registers): Add ptid parameter and use it. * aix-thread.c (aix_thread_store_registers): Add ptid parameter and use it. * amd64-linux-nat.c (amd64_linux_store_inferior_registers): Add ptid parameter and use it. * arm-linux-nat.c (store_fpregs, store_regs, store_wmmx_regs, store_vfp_regs, arm_linux_store_inferior_registers): Likewise. * arm-nbsd-nat.c (store_register, store_fp_register, armnbsd_store_registers): Likewise. * bsd-uthread.c (bsd_uthread_store_registers): Likewise. * hppa-linux-nat.c (store_register, hppa_linux_store_inferior_registers): Likewise. * i386-linux-nat.c (store_register, i386_linux_store_inferior_registers): Likewise. * ia64-linux-nat.c (ia64_linux_store_register, ia64_linux_store_registers): Likewise. * inf-child.c (inf_child_store_inferior_registers): Add ptid parameter. * inf-ptrace.c (inf_ptrace_store_register, inf_ptrace_store_registers): Likewise. * m68k-linux-nat.c (store_register, old_store_inferior_registers, m68k_linux_store_inferior_registers): Likewise. * mips-linux-nat.c (super_store_registers, mips64_linux_regsets_store_registers, mips64_linux_store_registers): Likewise. * ppc-linux-nat.c (ppc_linux_store_inferior_registers): Likewise. * ppc-nbsd-nat.c (ppcnbsd_store_inferior_registers): Likewise. * ppc-obsd-nat.c (ppcobsd_store_registers): Likewise. * ppc-ravenscar-thread.c (ppc_ravenscar_generic_store_registers): Add ptid parameter and use it. (ppc_ravenscar_powerpc_store_registers): Likewise. (ppc_ravenscar_e500_store_registers): Likewise. * proc-service.c (ps_lsetregs, ps_lsetfpregs): Add ptid parameter and use it. Don't set/restore inferior_ptid. * procfs.c (procfs_store_registers): Add ptid parameter and use it. * ravenscar-thread.c (ravenscar_store_registers): Add ptid parameter and use it. Remove declaration at top of file. * ravenscar-thread.h (struct ravenscar_arch_ops) : Add ptid parameter. * record-btrace.c (record_btrace_store_registers): Add ptid parameter and use it. * record-full.c (record_full_store_registers): Likewise. (record_full_core_store_registers): Add ptid parameter. * regcache.c (regcache_raw_write): Pass ptid to target_store_registers. * remote.c (remote_store_registers): Add ptid parameter and use it. * remote-sim.c (gdbsim_store_register): Likewise. * rs6000-aix-tdep.c (rs6000_push_dummy_call): Pass inferior_ptid to target_store_registers. * rs6000-lynx178-tdep.c (rs6000_lynx178_push_dummy_call): Likewise. * rs6000-nat.c (store_register, rs6000_store_inferior_registers): Add ptid parameter and use it. * s390-linux-nat.c (s390_linux_store_inferior_registers): Likewise. * sh-nbsd-nat.c (shnbsd_store_inferior_registers): Likewise. * sol-thread.c (sol_thread_store_registers): Likewise. * sparc-nat.c (sparc_store_inferior_registers): Likewise. * sparc-nat.h (sparc_store_inferior_registers): Likewise. * sparc-ravenscar-thread.c (sparc_ravenscar_store_registers): Add ptid parameter and use it. Remove declaration at top of file. * spu-linux-nat.c (spu_store_inferior_registers): Add ptid parameter and use it. * spu-multiarch.c (spu_store_registers): Likewise. * tilegx-linux-nat.c (store_inferior_registers): Likewise. * vax-bsd-nat.c (vaxbsd_store_inferior_registers): Likewise. * windows-nat.c (windows_store_inferior_registers): Likewise. * xtensa-linux-nat.c (store_gregs, store_xtregs, xtensa_linux_store_inferior_registers): Likewise. --- gdb/aarch64-linux-nat.c | 18 +++++++++--------- gdb/aix-thread.c | 9 +++++---- gdb/amd64-linux-nat.c | 7 ++++--- gdb/arm-linux-nat.c | 35 ++++++++++++++++++----------------- gdb/arm-nbsd-nat.c | 29 +++++++++++++++-------------- gdb/bsd-uthread.c | 6 +++--- gdb/hppa-linux-nat.c | 13 +++++++------ gdb/i386-linux-nat.c | 15 ++++++++------- gdb/ia64-linux-nat.c | 14 ++++++++------ gdb/inf-child.c | 3 ++- gdb/inf-ptrace.c | 14 ++++++++------ gdb/m68k-linux-nat.c | 22 ++++++++++++---------- gdb/mips-linux-nat.c | 22 ++++++++++++---------- gdb/ppc-linux-nat.c | 7 ++++--- gdb/ppc-nbsd-nat.c | 11 ++++++----- gdb/ppc-obsd-nat.c | 11 ++++++----- gdb/ppc-ravenscar-thread.c | 15 +++++++++------ gdb/proc-service.c | 18 ++++++------------ gdb/procfs.c | 11 ++++++----- gdb/ravenscar-thread.c | 13 ++++++------- gdb/ravenscar-thread.h | 2 +- gdb/record-btrace.c | 7 ++++--- gdb/record-full.c | 6 +++--- gdb/regcache.c | 2 +- gdb/remote-sim.c | 8 +++++--- gdb/remote.c | 5 +++-- gdb/rs6000-aix-tdep.c | 3 ++- gdb/rs6000-lynx178-tdep.c | 3 ++- gdb/rs6000-nat.c | 33 +++++++++++++++++---------------- gdb/s390-linux-nat.c | 5 +++-- gdb/sh-nbsd-nat.c | 7 ++++--- gdb/sol-thread.c | 11 ++++++----- gdb/sparc-nat.c | 7 ++++--- gdb/sparc-nat.h | 2 +- gdb/sparc-ravenscar-thread.c | 8 +++----- gdb/spu-linux-nat.c | 3 ++- gdb/spu-multiarch.c | 6 +++--- gdb/target-delegates.c | 14 ++++++++------ gdb/target.c | 4 ++-- gdb/target.h | 6 ++++-- gdb/tilegx-linux-nat.c | 7 ++++--- gdb/vax-bsd-nat.c | 7 ++++--- gdb/windows-nat.c | 5 +++-- gdb/xtensa-linux-nat.c | 23 ++++++++++++----------- 44 files changed, 255 insertions(+), 222 deletions(-) diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c index 3fc340496c..e17a4a2916 100644 --- a/gdb/aarch64-linux-nat.c +++ b/gdb/aarch64-linux-nat.c @@ -190,7 +190,7 @@ fetch_gregs_from_thread (struct regcache *regcache, ptid_t ptid) values in the GDB's register array. */ static void -store_gregs_to_thread (const struct regcache *regcache) +store_gregs_to_thread (const struct regcache *regcache, ptid_t ptid) { int ret, tid; elf_gregset_t regs; @@ -200,7 +200,7 @@ store_gregs_to_thread (const struct regcache *regcache) /* Make sure REGS can hold all registers contents on both aarch64 and arm. */ gdb_static_assert (sizeof (regs) >= 18 * 4); - tid = ptid_get_lwp (inferior_ptid); + tid = ptid_get_lwp (ptid); iovec.iov_base = ®s; if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32) @@ -281,7 +281,7 @@ fetch_fpregs_from_thread (struct regcache *regcache, ptid_t ptid) values in the GDB's register array. */ static void -store_fpregs_to_thread (const struct regcache *regcache) +store_fpregs_to_thread (const struct regcache *regcache, ptid_t ptid) { int ret, tid; elf_fpregset_t regs; @@ -291,7 +291,7 @@ store_fpregs_to_thread (const struct regcache *regcache) /* Make sure REGS can hold all VFP registers contents on both aarch64 and arm. */ gdb_static_assert (sizeof regs >= VFP_REGS_SIZE); - tid = ptid_get_lwp (inferior_ptid); + tid = ptid_get_lwp (ptid); iovec.iov_base = ®s; @@ -365,17 +365,17 @@ aarch64_linux_fetch_inferior_registers (struct target_ops *ops, static void aarch64_linux_store_inferior_registers (struct target_ops *ops, struct regcache *regcache, - int regno) + ptid_t ptid, int regno) { if (regno == -1) { - store_gregs_to_thread (regcache); - store_fpregs_to_thread (regcache); + store_gregs_to_thread (regcache, ptid); + store_fpregs_to_thread (regcache, ptid); } else if (regno < AARCH64_V0_REGNUM) - store_gregs_to_thread (regcache); + store_gregs_to_thread (regcache, ptid); else - store_fpregs_to_thread (regcache); + store_fpregs_to_thread (regcache, ptid); } /* Fill register REGNO (if it is a general-purpose register) in diff --git a/gdb/aix-thread.c b/gdb/aix-thread.c index b85c147f03..04144945da 100644 --- a/gdb/aix-thread.c +++ b/gdb/aix-thread.c @@ -1657,17 +1657,18 @@ store_regs_kernel_thread (const struct regcache *regcache, int regno, static void aix_thread_store_registers (struct target_ops *ops, - struct regcache *regcache, int regno) + struct regcache *regcache, + ptid_t ptid, int regno) { struct thread_info *thread; pthdb_tid_t tid; struct target_ops *beneath = find_target_beneath (ops); - if (!PD_TID (inferior_ptid)) - beneath->to_store_registers (beneath, regcache, regno); + if (!PD_TID (ptid)) + beneath->to_store_registers (beneath, regcache, ptid, regno); else { - thread = find_thread_ptid (inferior_ptid); + thread = find_thread_ptid (ptid); tid = thread->priv->tid; if (tid == PTHDB_INVALID_TID) diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c index a9f61cddac..f9c81ea84b 100644 --- a/gdb/amd64-linux-nat.c +++ b/gdb/amd64-linux-nat.c @@ -212,15 +212,16 @@ amd64_linux_fetch_inferior_registers (struct target_ops *ops, static void amd64_linux_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { struct gdbarch *gdbarch = get_regcache_arch (regcache); int tid; /* GNU/Linux LWP ID's are process ID's. */ - tid = ptid_get_lwp (inferior_ptid); + tid = ptid_get_lwp (ptid); if (tid == 0) - tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */ + tid = ptid_get_pid (ptid); /* Not a threaded program. */ if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum)) { diff --git a/gdb/arm-linux-nat.c b/gdb/arm-linux-nat.c index 86ac33d307..a1c50e27f3 100644 --- a/gdb/arm-linux-nat.c +++ b/gdb/arm-linux-nat.c @@ -107,13 +107,13 @@ fetch_fpregs (struct regcache *regcache, ptid_t ptid) the contents from regcache. */ static void -store_fpregs (const struct regcache *regcache) +store_fpregs (const struct regcache *regcache, ptid_t ptid) { int ret, regno, tid; gdb_byte fp[ARM_LINUX_SIZEOF_NWFPE]; /* Get the thread id for the ptrace call. */ - tid = ptid_get_lwp (inferior_ptid); + tid = ptid_get_lwp (ptid); /* Read the floating point state. */ if (have_ptrace_getregset == TRIBOOL_TRUE) @@ -188,13 +188,13 @@ fetch_regs (struct regcache *regcache, ptid_t ptid) } static void -store_regs (const struct regcache *regcache) +store_regs (const struct regcache *regcache, ptid_t ptid) { int ret, regno, tid; elf_gregset_t regs; /* Get the thread id for the ptrace call. */ - tid = ptid_get_lwp (inferior_ptid); + tid = ptid_get_lwp (ptid); /* Fetch the general registers. */ if (have_ptrace_getregset == TRIBOOL_TRUE) @@ -262,13 +262,13 @@ fetch_wmmx_regs (struct regcache *regcache, ptid_t ptid) } static void -store_wmmx_regs (const struct regcache *regcache) +store_wmmx_regs (const struct regcache *regcache, ptid_t ptid) { char regbuf[IWMMXT_REGS_SIZE]; int ret, regno, tid; /* Get the thread id for the ptrace call. */ - tid = ptid_get_lwp (inferior_ptid); + tid = ptid_get_lwp (ptid); ret = ptrace (PTRACE_GETWMMXREGS, tid, 0, regbuf); if (ret < 0) @@ -328,7 +328,7 @@ fetch_vfp_regs (struct regcache *regcache, ptid_t ptid) } static void -store_vfp_regs (const struct regcache *regcache) +store_vfp_regs (const struct regcache *regcache, ptid_t ptid) { gdb_byte regbuf[VFP_REGS_SIZE]; int ret, regno, tid; @@ -336,7 +336,7 @@ store_vfp_regs (const struct regcache *regcache) struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); /* Get the thread id for the ptrace call. */ - tid = ptid_get_lwp (inferior_ptid); + tid = ptid_get_lwp (ptid); if (have_ptrace_getregset == TRIBOOL_TRUE) { @@ -414,34 +414,35 @@ arm_linux_fetch_inferior_registers (struct target_ops *ops, static void arm_linux_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regno) + struct regcache *regcache, + ptid_t ptid, int regno) { struct gdbarch *gdbarch = get_regcache_arch (regcache); struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); if (-1 == regno) { - store_regs (regcache); + store_regs (regcache, ptid); if (tdep->have_wmmx_registers) - store_wmmx_regs (regcache); + store_wmmx_regs (regcache, ptid); if (tdep->vfp_register_count > 0) - store_vfp_regs (regcache); + store_vfp_regs (regcache, ptid); if (tdep->have_fpa_registers) - store_fpregs (regcache); + store_fpregs (regcache, ptid); } else { if (regno < ARM_F0_REGNUM || regno == ARM_PS_REGNUM) - store_regs (regcache); + store_regs (regcache, ptid); else if ((regno >= ARM_F0_REGNUM) && (regno <= ARM_FPS_REGNUM)) - store_fpregs (regcache); + store_fpregs (regcache, ptid); else if (tdep->have_wmmx_registers && regno >= ARM_WR0_REGNUM && regno <= ARM_WCGR7_REGNUM) - store_wmmx_regs (regcache); + store_wmmx_regs (regcache, ptid); else if (tdep->vfp_register_count > 0 && regno >= ARM_D0_REGNUM && regno <= ARM_D0_REGNUM + tdep->vfp_register_count) - store_vfp_regs (regcache); + store_vfp_regs (regcache, ptid); } } diff --git a/gdb/arm-nbsd-nat.c b/gdb/arm-nbsd-nat.c index 8857e37ce0..f59e5645b7 100644 --- a/gdb/arm-nbsd-nat.c +++ b/gdb/arm-nbsd-nat.c @@ -211,13 +211,13 @@ armnbsd_fetch_registers (struct target_ops *ops, static void -store_register (const struct regcache *regcache, int regno) +store_register (const struct regcache *regcache, ptid_t ptid, int regno) { struct gdbarch *gdbarch = get_regcache_arch (regcache); struct reg inferior_registers; int ret; - ret = ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid), + ret = ptrace (PT_GETREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) &inferior_registers, 0); if (ret < 0) @@ -280,7 +280,7 @@ store_register (const struct regcache *regcache, int regno) break; } - ret = ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid), + ret = ptrace (PT_SETREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) &inferior_registers, 0); if (ret < 0) @@ -328,7 +328,7 @@ store_regs (const struct regcache *regcache) inferior_registers.r_pc = pc_val | psr_val; } - ret = ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid), + ret = ptrace (PT_SETREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) &inferior_registers, 0); if (ret < 0) @@ -336,12 +336,12 @@ store_regs (const struct regcache *regcache) } static void -store_fp_register (const struct regcache *regcache, int regno) +store_fp_register (const struct regcache *regcache, ptid_t ptid, int regno) { struct fpreg inferior_fp_registers; int ret; - ret = ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid), + ret = ptrace (PT_GETFPREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) &inferior_fp_registers, 0); if (ret < 0) @@ -363,7 +363,7 @@ store_fp_register (const struct regcache *regcache, int regno) break; } - ret = ptrace (PT_SETFPREGS, ptid_get_pid (inferior_ptid), + ret = ptrace (PT_SETFPREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) &inferior_fp_registers, 0); if (ret < 0) @@ -371,7 +371,7 @@ store_fp_register (const struct regcache *regcache, int regno) } static void -store_fp_regs (const struct regcache *regcache) +store_fp_regs (const struct regcache *regcache, ptid_t ptid) { struct fpreg inferior_fp_registers; int ret; @@ -385,7 +385,7 @@ store_fp_regs (const struct regcache *regcache) regcache_raw_collect (regcache, ARM_FPS_REGNUM, (char *) &inferior_fp_registers.fpr_fpsr); - ret = ptrace (PT_SETFPREGS, ptid_get_pid (inferior_ptid), + ret = ptrace (PT_SETFPREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) &inferior_fp_registers, 0); if (ret < 0) @@ -394,19 +394,20 @@ store_fp_regs (const struct regcache *regcache) static void armnbsd_store_registers (struct target_ops *ops, - struct regcache *regcache, int regno) + struct regcache *regcache, + ptid_t ptid, int regno) { if (regno >= 0) { if (regno < ARM_F0_REGNUM || regno > ARM_FPS_REGNUM) - store_register (regcache, regno); + store_register (regcache, regno, ptid); else - store_fp_register (regcache, regno); + store_fp_register (regcache, regno, ptid); } else { - store_regs (regcache); - store_fp_regs (regcache); + store_regs (regcache, ptid); + store_fp_regs (regcache, ptid); } } diff --git a/gdb/bsd-uthread.c b/gdb/bsd-uthread.c index c2c9866cd0..04bd43bc6a 100644 --- a/gdb/bsd-uthread.c +++ b/gdb/bsd-uthread.c @@ -309,13 +309,13 @@ bsd_uthread_fetch_registers (struct target_ops *ops, struct regcache *regcache, static void bsd_uthread_store_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { struct gdbarch *gdbarch = get_regcache_arch (regcache); struct bsd_uthread_ops *uthread_ops = (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data); struct target_ops *beneath = find_target_beneath (ops); - ptid_t ptid = inferior_ptid; CORE_ADDR addr = ptid_get_tid (ptid); CORE_ADDR active_addr; @@ -330,7 +330,7 @@ bsd_uthread_store_registers (struct target_ops *ops, { /* Updating the thread that is currently running; pass the request to the layer beneath. */ - beneath->to_store_registers (beneath, regcache, regnum); + beneath->to_store_registers (beneath, regcache, ptid, regnum); } } diff --git a/gdb/hppa-linux-nat.c b/gdb/hppa-linux-nat.c index da1f914dd9..ff28313840 100644 --- a/gdb/hppa-linux-nat.c +++ b/gdb/hppa-linux-nat.c @@ -240,7 +240,7 @@ fetch_register (struct regcache *regcache, ptid_t ptid, int regno) /* Store one register. */ static void -store_register (const struct regcache *regcache, int regno) +store_register (const struct regcache *regcache, ptid_t ptid, int regno) { struct gdbarch *gdbarch = get_regcache_arch (regcache); int tid; @@ -250,9 +250,9 @@ store_register (const struct regcache *regcache, int regno) return; /* GNU/Linux LWP ID's are process ID's. */ - tid = ptid_get_lwp (inferior_ptid); + tid = ptid_get_lwp (ptid); if (tid == 0) - tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */ + tid = ptid_get_pid (ptid); /* Not a threaded program. */ errno = 0; regcache_raw_collect (regcache, regno, &val); @@ -291,18 +291,19 @@ hppa_linux_fetch_inferior_registers (struct target_ops *ops, static void hppa_linux_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regno) + struct regcache *regcache, + ptid_t ptid, int regno) { if (-1 == regno) { for (regno = 0; regno < gdbarch_num_regs (get_regcache_arch (regcache)); regno++) - store_register (regcache, regno); + store_register (regcache, regno, ptid); } else { - store_register (regcache, regno); + store_register (regcache, regno, ptid); } } diff --git a/gdb/i386-linux-nat.c b/gdb/i386-linux-nat.c index 7602f80529..94f6809eb9 100644 --- a/gdb/i386-linux-nat.c +++ b/gdb/i386-linux-nat.c @@ -123,7 +123,7 @@ fetch_register (struct regcache *regcache, ptid_t ptid, int regno) /* Store one register. */ static void -store_register (const struct regcache *regcache, int regno) +store_register (const struct regcache *regcache, ptid_t ptid, int regno) { int tid; int val; @@ -133,9 +133,9 @@ store_register (const struct regcache *regcache, int regno) return; /* GNU/Linux LWP ID's are process ID's. */ - tid = ptid_get_lwp (inferior_ptid); + tid = ptid_get_lwp (ptid); if (tid == 0) - tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */ + tid = ptid_get_pid (ptid); /* Not a threaded program. */ errno = 0; regcache_raw_collect (regcache, regno, &val); @@ -535,7 +535,8 @@ i386_linux_fetch_inferior_registers (struct target_ops *ops, registers). */ static void i386_linux_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regno) + struct regcache *regcache, + ptid_t ptid, int regno) { int tid; @@ -547,15 +548,15 @@ i386_linux_store_inferior_registers (struct target_ops *ops, for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++) if (regno == -1 || regno == i) - store_register (regcache, i); + store_register (regcache, ptid, i); return; } /* GNU/Linux LWP ID's are process ID's. */ - tid = ptid_get_lwp (inferior_ptid); + tid = ptid_get_lwp (ptid); if (tid == 0) - tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */ + tid = ptid_get_pid (ptid); /* Not a threaded program. */ /* Use the PTRACE_SETFPXREGS requests whenever possible, since it transfers more registers in one system call. But remember that diff --git a/gdb/ia64-linux-nat.c b/gdb/ia64-linux-nat.c index da3fdaecf6..7c00c5b51f 100644 --- a/gdb/ia64-linux-nat.c +++ b/gdb/ia64-linux-nat.c @@ -783,7 +783,8 @@ ia64_linux_fetch_registers (struct target_ops *ops, /* Store register REGNUM into the inferior. */ static void -ia64_linux_store_register (const struct regcache *regcache, int regnum) +ia64_linux_store_register (const struct regcache *regcache, + ptid_t ptid, int regnum) { struct gdbarch *gdbarch = get_regcache_arch (regcache); CORE_ADDR addr; @@ -796,9 +797,9 @@ ia64_linux_store_register (const struct regcache *regcache, int regnum) /* Cater for systems like GNU/Linux, that implement threads as separate processes. */ - pid = ptid_get_lwp (inferior_ptid); + pid = ptid_get_lwp (ptid); if (pid == 0) - pid = ptid_get_pid (inferior_ptid); + pid = ptid_get_pid (ptid); /* This isn't really an address, but ptrace thinks of it as one. */ addr = ia64_register_addr (gdbarch, regnum); @@ -827,15 +828,16 @@ ia64_linux_store_register (const struct regcache *regcache, int regnum) static void ia64_linux_store_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { if (regnum == -1) for (regnum = 0; regnum < gdbarch_num_regs (get_regcache_arch (regcache)); regnum++) - ia64_linux_store_register (regcache, regnum); + ia64_linux_store_register (regcache, ptid, regnum); else - ia64_linux_store_register (regcache, regnum); + ia64_linux_store_register (regcache, ptid, regnum); } diff --git a/gdb/inf-child.c b/gdb/inf-child.c index 49445dd688..0f128c4905 100644 --- a/gdb/inf-child.c +++ b/gdb/inf-child.c @@ -91,7 +91,8 @@ inf_child_fetch_inferior_registers (struct target_ops *ops, static void inf_child_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { } diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c index 3cc6a133fd..cf9cf5e93e 100644 --- a/gdb/inf-ptrace.c +++ b/gdb/inf-ptrace.c @@ -767,7 +767,8 @@ inf_ptrace_fetch_registers (struct target_ops *ops, struct regcache *regcache, /* Store register REGNUM into the inferior. */ static void -inf_ptrace_store_register (const struct regcache *regcache, int regnum) +inf_ptrace_store_register (const struct regcache *regcache, + ptid_t ptid, int regnum) { struct gdbarch *gdbarch = get_regcache_arch (regcache); CORE_ADDR addr; @@ -783,9 +784,9 @@ inf_ptrace_store_register (const struct regcache *regcache, int regnum) /* Cater for systems like GNU/Linux, that implement threads as separate processes. */ - pid = ptid_get_lwp (inferior_ptid); + pid = ptid_get_lwp (ptid); if (pid == 0) - pid = ptid_get_pid (inferior_ptid); + pid = ptid_get_pid (ptid); size = register_size (gdbarch, regnum); gdb_assert ((size % sizeof (PTRACE_TYPE_RET)) == 0); @@ -811,15 +812,16 @@ inf_ptrace_store_register (const struct regcache *regcache, int regnum) static void inf_ptrace_store_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { if (regnum == -1) for (regnum = 0; regnum < gdbarch_num_regs (get_regcache_arch (regcache)); regnum++) - inf_ptrace_store_register (regcache, regnum); + inf_ptrace_store_register (regcache, ptid, regnum); else - inf_ptrace_store_register (regcache, regnum); + inf_ptrace_store_register (regcache, ptid, regnum); } /* Create a "traditional" ptrace target. REGISTER_U_OFFSET should be diff --git a/gdb/m68k-linux-nat.c b/gdb/m68k-linux-nat.c index d7403e5e72..b39459df28 100644 --- a/gdb/m68k-linux-nat.c +++ b/gdb/m68k-linux-nat.c @@ -154,7 +154,7 @@ old_fetch_inferior_registers (struct regcache *regcache, ptid_t ptid, int regno) /* Store one register. */ static void -store_register (const struct regcache *regcache, int regno) +store_register (const struct regcache *regcache, ptid_t ptid, int regno) { struct gdbarch *gdbarch = get_regcache_arch (regcache); long regaddr, val; @@ -163,9 +163,9 @@ store_register (const struct regcache *regcache, int regno) gdb_byte buf[M68K_MAX_REGISTER_SIZE]; /* Overload thread id onto process id. */ - tid = ptid_get_lwp (inferior_ptid); + tid = ptid_get_lwp (ptid); if (tid == 0) - tid = ptid_get_pid (inferior_ptid); /* no thread id, just use + tid = ptid_get_pid (ptid); /* no thread id, just use process id. */ regaddr = 4 * regmap[regno]; @@ -192,11 +192,12 @@ store_register (const struct regcache *regcache, int regno) Otherwise, REGNO specifies which register (so we can save time). */ static void -old_store_inferior_registers (const struct regcache *regcache, int regno) +old_store_inferior_registers (const struct regcache *regcache, + ptid_t ptid, int regno) { if (regno >= 0) { - store_register (regcache, regno); + store_register (regcache, ptid, regno); } else { @@ -204,7 +205,7 @@ old_store_inferior_registers (const struct regcache *regcache, int regno) regno < gdbarch_num_regs (get_regcache_arch (regcache)); regno++) { - store_register (regcache, regno); + store_register (regcache, ptid, regno); } } } @@ -462,7 +463,8 @@ m68k_linux_fetch_inferior_registers (struct target_ops *ops, registers). */ static void m68k_linux_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regno) + struct regcache *regcache, + ptid_t ptid, int regno) { int tid; @@ -470,14 +472,14 @@ m68k_linux_store_inferior_registers (struct target_ops *ops, SETREGS request isn't available. */ if (! have_ptrace_getregs) { - old_store_inferior_registers (regcache, regno); + old_store_inferior_registers (regcache, ptid, regno); return; } /* GNU/Linux LWP ID's are process ID's. */ - tid = ptid_get_lwp (inferior_ptid); + tid = ptid_get_lwp (ptid); if (tid == 0) - tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */ + tid = ptid_get_pid (ptid); /* Not a threaded program. */ /* Use the PTRACE_SETFPREGS requests whenever possible, since it transfers more registers in one system call. But remember that diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c index f9b6e1b2fc..8456cc0e9b 100644 --- a/gdb/mips-linux-nat.c +++ b/gdb/mips-linux-nat.c @@ -56,7 +56,7 @@ static int have_ptrace_regsets = 1; static void (*super_fetch_registers) (struct target_ops *, struct regcache *, ptid_t, int); static void (*super_store_registers) (struct target_ops *, - struct regcache *, int); + struct regcache *, ptid_t, int); static void (*super_close) (struct target_ops *); @@ -304,7 +304,8 @@ mips64_linux_regsets_fetch_registers (struct target_ops *ops, static void mips64_linux_regsets_store_registers (struct target_ops *ops, - struct regcache *regcache, int regno) + struct regcache *regcache, + ptid_t ptid, int regno) { struct gdbarch *gdbarch = get_regcache_arch (regcache); int is_fp, is_dsp; @@ -334,9 +335,9 @@ mips64_linux_regsets_store_registers (struct target_ops *ops, else is_dsp = 0; - tid = ptid_get_lwp (inferior_ptid); + tid = ptid_get_lwp (ptid); if (tid == 0) - tid = ptid_get_pid (inferior_ptid); + tid = ptid_get_pid (ptid); if (regno == -1 || (!is_fp && !is_dsp)) { @@ -367,14 +368,14 @@ mips64_linux_regsets_store_registers (struct target_ops *ops, } if (is_dsp) - super_store_registers (ops, regcache, regno); + super_store_registers (ops, regcache, ptid, regno); else if (regno == -1 && have_dsp) { for (regi = mips_regnum (gdbarch)->dspacc; regi < mips_regnum (gdbarch)->dspacc + 6; regi++) - super_store_registers (ops, regcache, regi); - super_store_registers (ops, regcache, mips_regnum (gdbarch)->dspctl); + super_store_registers (ops, regcache, ptid, regi); + super_store_registers (ops, regcache, ptid, mips_regnum (gdbarch)->dspctl); } } @@ -401,16 +402,17 @@ mips64_linux_fetch_registers (struct target_ops *ops, static void mips64_linux_store_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { /* Unless we already know that PTRACE_GETREGS does not work, try it. */ if (have_ptrace_regsets) - mips64_linux_regsets_store_registers (ops, regcache, regnum); + mips64_linux_regsets_store_registers (ops, regcache, ptid, regnum); /* If we know, or just found out, that PTRACE_GETREGS does not work, fall back to PTRACE_PEEKUSER. */ if (!have_ptrace_regsets) - super_store_registers (ops, regcache, regnum); + super_store_registers (ops, regcache, ptid, regnum); } /* Return the address in the core dump or inferior of register diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c index e7070ccd37..a35e06864e 100644 --- a/gdb/ppc-linux-nat.c +++ b/gdb/ppc-linux-nat.c @@ -2290,14 +2290,15 @@ ppc_linux_masked_watch_num_registers (struct target_ops *target, static void ppc_linux_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regno) + struct regcache *regcache, + ptid_t ptid, int regno) { /* Overload thread id onto process id. */ - int tid = ptid_get_lwp (inferior_ptid); + int tid = ptid_get_lwp (ptid); /* No thread id, just use process id. */ if (tid == 0) - tid = ptid_get_pid (inferior_ptid); + tid = ptid_get_pid (ptid); if (regno >= 0) store_register (regcache, tid, regno); diff --git a/gdb/ppc-nbsd-nat.c b/gdb/ppc-nbsd-nat.c index f2b837b3c0..13a6382956 100644 --- a/gdb/ppc-nbsd-nat.c +++ b/gdb/ppc-nbsd-nat.c @@ -110,7 +110,8 @@ ppcnbsd_fetch_inferior_registers (struct target_ops *ops, static void ppcnbsd_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { struct gdbarch *gdbarch = get_regcache_arch (regcache); @@ -118,14 +119,14 @@ ppcnbsd_store_inferior_registers (struct target_ops *ops, { struct reg regs; - if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid), + if (ptrace (PT_GETREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't get registers")); ppc_collect_gregset (&ppcnbsd_gregset, regcache, regnum, ®s, sizeof regs); - if (ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid), + if (ptrace (PT_SETREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't write registers")); } @@ -134,14 +135,14 @@ ppcnbsd_store_inferior_registers (struct target_ops *ops, { struct fpreg fpregs; - if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid), + if (ptrace (PT_GETFPREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't get FP registers")); ppc_collect_fpregset (&ppcnbsd_fpregset, regcache, regnum, &fpregs, sizeof fpregs); - if (ptrace (PT_SETFPREGS, ptid_get_pid (inferior_ptid), + if (ptrace (PT_SETFPREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't set FP registers")); } diff --git a/gdb/ppc-obsd-nat.c b/gdb/ppc-obsd-nat.c index 0bb6f9f5d2..09a6acedcd 100644 --- a/gdb/ppc-obsd-nat.c +++ b/gdb/ppc-obsd-nat.c @@ -109,11 +109,12 @@ ppcobsd_fetch_registers (struct target_ops *ops, static void ppcobsd_store_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { struct reg regs; - if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid), + if (ptrace (PT_GETREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't get registers")); @@ -124,7 +125,7 @@ ppcobsd_store_registers (struct target_ops *ops, regnum, ®s, sizeof regs); #endif - if (ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid), + if (ptrace (PT_SETREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't write registers")); @@ -134,14 +135,14 @@ ppcobsd_store_registers (struct target_ops *ops, { struct fpreg fpregs; - if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid), + if (ptrace (PT_GETFPREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't get floating point status")); ppc_collect_fpregset (&ppcobsd_fpregset, regcache, regnum, &fpregs, sizeof fpregs); - if (ptrace (PT_SETFPREGS, ptid_get_pid (inferior_ptid), + if (ptrace (PT_SETFPREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) perror_with_name (_("Couldn't write floating point status")); } diff --git a/gdb/ppc-ravenscar-thread.c b/gdb/ppc-ravenscar-thread.c index 9f518c2b53..1e4eb03cf1 100644 --- a/gdb/ppc-ravenscar-thread.c +++ b/gdb/ppc-ravenscar-thread.c @@ -184,7 +184,7 @@ ppc_ravenscar_generic_prepare_to_store (struct regcache *regcache) static void ppc_ravenscar_generic_store_registers (const struct ravenscar_reg_info *reg_info, - struct regcache *regcache, int regnum) + struct regcache *regcache, ptid_t ptid, int regnum) { struct gdbarch *gdbarch = get_regcache_arch (regcache); int buf_size = register_size (gdbarch, regnum); @@ -193,7 +193,7 @@ ppc_ravenscar_generic_store_registers if (register_in_thread_descriptor_p (reg_info, regnum)) register_address - = ptid_get_tid (inferior_ptid) + reg_info->context_offsets [regnum]; + = ptid_get_tid (ptid) + reg_info->context_offsets [regnum]; else return; @@ -225,9 +225,10 @@ ppc_ravenscar_powerpc_fetch_registers (struct regcache *regcache, ptid_t ptid, for most PowerPC targets. */ static void -ppc_ravenscar_powerpc_store_registers (struct regcache *regcache, int regnum) +ppc_ravenscar_powerpc_store_registers (struct regcache *regcache, ptid_t ptid, + int regnum) { - ppc_ravenscar_generic_store_registers (&ppc_reg_info, regcache, regnum); + ppc_ravenscar_generic_store_registers (&ppc_reg_info, regcache, ptid, regnum); } /* The ravenscar_arch_ops vector for most PowerPC targets. */ @@ -270,9 +271,11 @@ ppc_ravenscar_e500_fetch_registers (struct regcache *regcache, ptid_t ptid, for E500 targets. */ static void -ppc_ravenscar_e500_store_registers (struct regcache *regcache, int regnum) +ppc_ravenscar_e500_store_registers (struct regcache *regcache, ptid_t ptid, + int regnum) { - ppc_ravenscar_generic_store_registers (&e500_reg_info, regcache, regnum); + ppc_ravenscar_generic_store_registers (&e500_reg_info, regcache, ptid, + regnum); } /* The ravenscar_arch_ops vector for E500 targets. */ diff --git a/gdb/proc-service.c b/gdb/proc-service.c index 188ad55157..373c762cb4 100644 --- a/gdb/proc-service.c +++ b/gdb/proc-service.c @@ -174,16 +174,13 @@ ps_lgetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, prgregset_t gregset) ps_err_e ps_lsetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, const prgregset_t gregset) { - struct cleanup *old_chain = save_inferior_ptid (); struct regcache *regcache; + ptid_t ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0); - inferior_ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0); - regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ()); - + regcache = get_thread_arch_regcache (ptid, target_gdbarch ()); supply_gregset (regcache, (const gdb_gregset_t *) gregset); - target_store_registers (regcache, -1); + target_store_registers (regcache, ptid, -1); - do_cleanups (old_chain); return PS_OK; } @@ -211,16 +208,13 @@ ps_err_e ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, const gdb_prfpregset_t *fpregset) { - struct cleanup *old_chain = save_inferior_ptid (); struct regcache *regcache; + ptid_t ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0); - inferior_ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0); - regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ()); - + regcache = get_thread_arch_regcache (ptid, target_gdbarch ()); supply_fpregset (regcache, (const gdb_fpregset_t *) fpregset); - target_store_registers (regcache, -1); + target_store_registers (regcache, ptid, -1); - do_cleanups (old_chain); return PS_OK; } diff --git a/gdb/procfs.c b/gdb/procfs.c index c7b7dab1d4..e98f68aef9 100644 --- a/gdb/procfs.c +++ b/gdb/procfs.c @@ -117,7 +117,7 @@ static void procfs_files_info (struct target_ops *); static void procfs_fetch_registers (struct target_ops *, struct regcache *, ptid_t, int); static void procfs_store_registers (struct target_ops *, - struct regcache *, int); + struct regcache *, ptid_t, int); static void procfs_pass_signals (struct target_ops *self, int, unsigned char *); static void procfs_kill_inferior (struct target_ops *ops); @@ -3265,19 +3265,20 @@ procfs_fetch_registers (struct target_ops *ops, static void procfs_store_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { gdb_gregset_t *gregs; procinfo *pi; - int pid = ptid_get_pid (inferior_ptid); - int tid = ptid_get_lwp (inferior_ptid); + int pid = ptid_get_pid (ptid); + int tid = ptid_get_lwp (ptid); struct gdbarch *gdbarch = get_regcache_arch (regcache); pi = find_procinfo_or_die (pid, tid); if (pi == NULL) error (_("procfs: store_registers: failed to find procinfo for %s"), - target_pid_to_str (inferior_ptid)); + target_pid_to_str (ptid)); gregs = proc_get_gregs (pi); if (gregs == NULL) diff --git a/gdb/ravenscar-thread.c b/gdb/ravenscar-thread.c index 12a4eab269..0660d03a5e 100644 --- a/gdb/ravenscar-thread.c +++ b/gdb/ravenscar-thread.c @@ -57,8 +57,6 @@ static ptid_t ravenscar_running_thread (void); static char *ravenscar_extra_thread_info (struct target_ops *self, struct thread_info *tp); static int ravenscar_thread_alive (struct target_ops *ops, ptid_t ptid); -static void ravenscar_store_registers (struct target_ops *ops, - struct regcache *regcache, int regnum); static void ravenscar_prepare_to_store (struct target_ops *self, struct regcache *regcache); static void ravenscar_resume (struct target_ops *ops, ptid_t ptid, int step, @@ -283,21 +281,22 @@ ravenscar_fetch_registers (struct target_ops *ops, struct regcache *regcache, static void ravenscar_store_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { struct target_ops *beneath = find_target_beneath (ops); if (!ravenscar_runtime_initialized () - || ptid_equal (inferior_ptid, base_magic_null_ptid) - || ptid_equal (inferior_ptid, ravenscar_running_thread ())) - beneath->to_store_registers (beneath, regcache, regnum); + || ptid_equal (ptid, base_magic_null_ptid) + || ptid_equal (ptid, ravenscar_running_thread ())) + beneath->to_store_registers (beneath, regcache, ptid, regnum); else { struct gdbarch *gdbarch = get_regcache_arch (regcache); struct ravenscar_arch_ops *arch_ops = gdbarch_ravenscar_ops (gdbarch); - arch_ops->to_store_registers (regcache, regnum); + arch_ops->to_store_registers (regcache, ptid, regnum); } } diff --git a/gdb/ravenscar-thread.h b/gdb/ravenscar-thread.h index 2413153010..2df88981a5 100644 --- a/gdb/ravenscar-thread.h +++ b/gdb/ravenscar-thread.h @@ -25,7 +25,7 @@ struct ravenscar_arch_ops { void (*to_fetch_registers) (struct regcache *, ptid_t, int); - void (*to_store_registers) (struct regcache *, int); + void (*to_store_registers) (struct regcache *, ptid_t, int); void (*to_prepare_to_store) (struct regcache *); }; diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c index 3f6cc85947..6c16148a25 100644 --- a/gdb/record-btrace.c +++ b/gdb/record-btrace.c @@ -1462,18 +1462,19 @@ record_btrace_fetch_registers (struct target_ops *ops, static void record_btrace_store_registers (struct target_ops *ops, - struct regcache *regcache, int regno) + struct regcache *regcache, + ptid_t ptid, int regno) { struct target_ops *t; if (!record_btrace_generating_corefile - && record_btrace_is_replaying (ops, inferior_ptid)) + && record_btrace_is_replaying (ops, ptid)) error (_("Cannot write registers while replaying.")); gdb_assert (may_write_registers != 0); t = ops->beneath; - t->to_store_registers (t, regcache, regno); + t->to_store_registers (t, regcache, ptid, regno); } /* The to_prepare_to_store method of target record-btrace. */ diff --git a/gdb/record-full.c b/gdb/record-full.c index 0b04f0fbb7..c55fb41b01 100644 --- a/gdb/record-full.c +++ b/gdb/record-full.c @@ -1459,7 +1459,7 @@ record_full_registers_change (struct regcache *regcache, int regnum) static void record_full_store_registers (struct target_ops *ops, struct regcache *regcache, - int regno) + ptid_t ptid, int regno) { if (!record_full_gdb_operation_disable) { @@ -1507,7 +1507,7 @@ record_full_store_registers (struct target_ops *ops, record_full_registers_change (regcache, regno); } - ops->beneath->to_store_registers (ops->beneath, regcache, regno); + ops->beneath->to_store_registers (ops->beneath, regcache, ptid, regno); } /* "to_xfer_partial" method. Behavior is conditional on @@ -2074,7 +2074,7 @@ record_full_core_prepare_to_store (struct target_ops *self, static void record_full_core_store_registers (struct target_ops *ops, struct regcache *regcache, - int regno) + ptid_t ptid, int regno) { if (record_full_gdb_operation_disable) regcache_raw_collect (regcache, regno, diff --git a/gdb/regcache.c b/gdb/regcache.c index bdf0bcbc82..c8eb200fa2 100644 --- a/gdb/regcache.c +++ b/gdb/regcache.c @@ -957,7 +957,7 @@ regcache_raw_write (struct regcache *regcache, int regnum, chain_before_invalidate_register = make_cleanup_regcache_invalidate (regcache, regnum); - target_store_registers (regcache, regnum); + target_store_registers (regcache, regcache->ptid, regnum); /* The target did not throw an error so we can discard invalidating the register and restore the cleanup chain to what it was. */ diff --git a/gdb/remote-sim.c b/gdb/remote-sim.c index 609ae84fac..b7ecdbb05f 100644 --- a/gdb/remote-sim.c +++ b/gdb/remote-sim.c @@ -504,16 +504,18 @@ gdbsim_fetch_register (struct target_ops *ops, static void gdbsim_store_register (struct target_ops *ops, - struct regcache *regcache, int regno) + struct regcache *regcache, + ptid_t ptid, int regno) { struct gdbarch *gdbarch = get_regcache_arch (regcache); + struct inferior *inf = find_inferior_ptid (ptid); struct sim_inferior_data *sim_data - = get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NEEDED); + = get_sim_inferior_data (inf, SIM_INSTANCE_NEEDED); if (regno == -1) { for (regno = 0; regno < gdbarch_num_regs (gdbarch); regno++) - gdbsim_store_register (ops, regcache, regno); + gdbsim_store_register (ops, regcache, ptid, regno); return; } else if (gdbarch_register_sim_regno (gdbarch, regno) >= 0) diff --git a/gdb/remote.c b/gdb/remote.c index b1b1c58038..b7ffa4a28f 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -7862,13 +7862,14 @@ store_registers_using_G (const struct regcache *regcache) static void remote_store_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { struct remote_arch_state *rsa = get_remote_arch_state (); int i; set_remote_traceframe (); - set_general_thread (inferior_ptid); + set_general_thread (ptid); if (regnum >= 0) { diff --git a/gdb/rs6000-aix-tdep.c b/gdb/rs6000-aix-tdep.c index 9841a60eaf..3cd0350e14 100644 --- a/gdb/rs6000-aix-tdep.c +++ b/gdb/rs6000-aix-tdep.c @@ -37,6 +37,7 @@ #include "solib.h" #include "solib-aix.h" #include "xml-utils.h" +#include "inferior.h" /* If the kernel has to deliver a signal, it pushes a sigcontext structure on the stack and then calls the signal handler, passing @@ -407,7 +408,7 @@ ran_out_of_registers_for_arguments: regcache_raw_write_signed (regcache, tdep->ppc_toc_regnum, solib_aix_get_toc_value (func_addr)); - target_store_registers (regcache, -1); + target_store_registers (regcache, inferior_ptid, -1); return sp; } diff --git a/gdb/rs6000-lynx178-tdep.c b/gdb/rs6000-lynx178-tdep.c index f2aa1f8448..600084f546 100644 --- a/gdb/rs6000-lynx178-tdep.c +++ b/gdb/rs6000-lynx178-tdep.c @@ -24,6 +24,7 @@ #include "ppc-tdep.h" #include "value.h" #include "xcoffread.h" +#include "inferior.h" /* Implement the "push_dummy_call" gdbarch method. */ @@ -256,7 +257,7 @@ ran_out_of_registers_for_arguments: breakpoint. */ regcache_raw_write_signed (regcache, tdep->ppc_lr_regnum, bp_addr); - target_store_registers (regcache, -1); + target_store_registers (regcache, inferior_ptid, -1); return sp; } diff --git a/gdb/rs6000-nat.c b/gdb/rs6000-nat.c index 7362df9580..6f3f807637 100644 --- a/gdb/rs6000-nat.c +++ b/gdb/rs6000-nat.c @@ -219,7 +219,7 @@ fetch_register (struct regcache *regcache, ptid_t ptid, int regno) /* Store register REGNO back into the inferior. */ static void -store_register (struct regcache *regcache, int regno) +store_register (struct regcache *regcache, ptid_t ptid, int regno) { struct gdbarch *gdbarch = get_regcache_arch (regcache); int addr[MAX_REGISTER_SIZE]; @@ -235,7 +235,7 @@ store_register (struct regcache *regcache, int regno) /* Floating-point registers. */ if (isfloat) - rs6000_ptrace32 (PT_WRITE_FPR, ptid_get_pid (inferior_ptid), addr, nr, 0); + rs6000_ptrace32 (PT_WRITE_FPR, ptid_get_pid (ptid), addr, nr, 0); /* Bogus register number. */ else if (nr < 0) @@ -253,7 +253,7 @@ store_register (struct regcache *regcache, int regno) the register's value is passed by value, but for 64-bit inferiors, the address of a buffer containing the value is passed. */ if (!ARCH64 ()) - rs6000_ptrace32 (PT_WRITE_GPR, ptid_get_pid (inferior_ptid), + rs6000_ptrace32 (PT_WRITE_GPR, ptid_get_pid (ptid), (int *) nr, *addr, 0); else { @@ -264,7 +264,7 @@ store_register (struct regcache *regcache, int regno) memcpy (&buf, addr, 8); else buf = *addr; - rs6000_ptrace64 (PT_WRITE_GPR, ptid_get_pid (inferior_ptid), + rs6000_ptrace64 (PT_WRITE_GPR, ptid_get_pid (ptid), nr, 0, &buf); } } @@ -325,11 +325,12 @@ rs6000_fetch_inferior_registers (struct target_ops *ops, static void rs6000_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regno) + struct regcache *regcache, + ptid_t ptid, int regno) { struct gdbarch *gdbarch = get_regcache_arch (regcache); if (regno != -1) - store_register (regcache, regno); + store_register (regcache, ptid, regno); else { @@ -340,25 +341,25 @@ rs6000_store_inferior_registers (struct target_ops *ops, regno < tdep->ppc_gp0_regnum + ppc_num_gprs; regno++) { - store_register (regcache, regno); + store_register (regcache, ptid, regno); } /* Write floating point registers. */ if (tdep->ppc_fp0_regnum >= 0) for (regno = 0; regno < ppc_num_fprs; regno++) - store_register (regcache, tdep->ppc_fp0_regnum + regno); + store_register (regcache, ptid, tdep->ppc_fp0_regnum + regno); /* Write special registers. */ - store_register (regcache, gdbarch_pc_regnum (gdbarch)); - store_register (regcache, tdep->ppc_ps_regnum); - store_register (regcache, tdep->ppc_cr_regnum); - store_register (regcache, tdep->ppc_lr_regnum); - store_register (regcache, tdep->ppc_ctr_regnum); - store_register (regcache, tdep->ppc_xer_regnum); + store_register (regcache, ptid, gdbarch_pc_regnum (gdbarch)); + store_register (regcache, ptid, tdep->ppc_ps_regnum); + store_register (regcache, ptid, tdep->ppc_cr_regnum); + store_register (regcache, ptid, tdep->ppc_lr_regnum); + store_register (regcache, ptid, tdep->ppc_ctr_regnum); + store_register (regcache, ptid, tdep->ppc_xer_regnum); if (tdep->ppc_fpscr_regnum >= 0) - store_register (regcache, tdep->ppc_fpscr_regnum); + store_register (regcache, ptid, tdep->ppc_fpscr_regnum); if (tdep->ppc_mq_regnum >= 0) - store_register (regcache, tdep->ppc_mq_regnum); + store_register (regcache, ptid, tdep->ppc_mq_regnum); } } diff --git a/gdb/s390-linux-nat.c b/gdb/s390-linux-nat.c index 1703844e08..15fab438a3 100644 --- a/gdb/s390-linux-nat.c +++ b/gdb/s390-linux-nat.c @@ -420,9 +420,10 @@ s390_linux_fetch_inferior_registers (struct target_ops *ops, -1, do this for all registers. */ static void s390_linux_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { - int tid = s390_inferior_tid (); + int tid = s390_inferior_tid (ptid); if (regnum == -1 || S390_IS_GREGSET_REGNUM (regnum)) store_regs (regcache, tid, regnum); diff --git a/gdb/sh-nbsd-nat.c b/gdb/sh-nbsd-nat.c index d1ece86cdd..4d1794f806 100644 --- a/gdb/sh-nbsd-nat.c +++ b/gdb/sh-nbsd-nat.c @@ -65,13 +65,14 @@ shnbsd_fetch_inferior_registers (struct target_ops *ops, static void shnbsd_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regno) + struct regcache *regcache, + ptid_t ptid, int regno) { if (regno == -1 || GETREGS_SUPPLIES (get_regcache_arch (regcache), regno)) { struct reg inferior_registers; - if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid), + if (ptrace (PT_GETREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) &inferior_registers, 0) == -1) perror_with_name (_("Couldn't get registers")); @@ -79,7 +80,7 @@ shnbsd_store_inferior_registers (struct target_ops *ops, (char *) &inferior_registers, SHNBSD_SIZEOF_GREGS); - if (ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid), + if (ptrace (PT_SETREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) &inferior_registers, 0) == -1) perror_with_name (_("Couldn't set registers")); diff --git a/gdb/sol-thread.c b/gdb/sol-thread.c index 56fdc96380..bd20cba480 100644 --- a/gdb/sol-thread.c +++ b/gdb/sol-thread.c @@ -508,7 +508,8 @@ sol_thread_fetch_registers (struct target_ops *ops, static void sol_thread_store_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { thread_t thread; td_thrhandle_t thandle; @@ -516,17 +517,17 @@ sol_thread_store_registers (struct target_ops *ops, prgregset_t gregset; prfpregset_t fpregset; - if (!ptid_tid_p (inferior_ptid)) + if (!ptid_tid_p (ptid)) { struct target_ops *beneath = find_target_beneath (ops); /* It's an LWP; pass the request on to the layer beneath. */ - beneath->to_store_registers (beneath, regcache, regnum); + beneath->to_store_registers (beneath, regcache, ptid, regnum); return; } - /* Solaris thread: convert INFERIOR_PTID into a td_thrhandle_t. */ - thread = ptid_get_tid (inferior_ptid); + /* Solaris thread: convert PTID into a td_thrhandle_t. */ + thread = ptid_get_tid (ptid); val = p_td_ta_map_id2thr (main_ta, thread, &thandle); if (val != TD_OK) diff --git a/gdb/sparc-nat.c b/gdb/sparc-nat.c index b423ce5c40..f0bcc131dc 100644 --- a/gdb/sparc-nat.c +++ b/gdb/sparc-nat.c @@ -191,16 +191,17 @@ sparc_fetch_inferior_registers (struct target_ops *ops, void sparc_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { struct gdbarch *gdbarch = get_regcache_arch (regcache); int pid; /* NOTE: cagney/2002-12-02: See comment in fetch_inferior_registers about threaded assumptions. */ - pid = ptid_get_lwp (inferior_ptid); + pid = ptid_get_lwp (ptid); if (pid == 0) - pid = ptid_get_pid (inferior_ptid); + pid = ptid_get_pid (ptid); if (regnum == -1 || sparc_gregset_supplies_p (gdbarch, regnum)) { diff --git a/gdb/sparc-nat.h b/gdb/sparc-nat.h index bfa6961fe9..4ab8130403 100644 --- a/gdb/sparc-nat.h +++ b/gdb/sparc-nat.h @@ -47,6 +47,6 @@ extern struct target_ops *sparc_target (void); extern void sparc_fetch_inferior_registers (struct target_ops *, struct regcache *, ptid_t, int); extern void sparc_store_inferior_registers (struct target_ops *, - struct regcache *, int); + struct regcache *, ptid_t, int); #endif /* sparc-nat.h */ diff --git a/gdb/sparc-ravenscar-thread.c b/gdb/sparc-ravenscar-thread.c index 0573f8345d..4e63ec5a3c 100644 --- a/gdb/sparc-ravenscar-thread.c +++ b/gdb/sparc-ravenscar-thread.c @@ -25,8 +25,6 @@ #include "ravenscar-thread.h" #include "sparc-ravenscar-thread.h" -static void sparc_ravenscar_store_registers (struct regcache *regcache, - int regnum); static void sparc_ravenscar_prepare_to_store (struct regcache *regcache); /* Register offsets from a referenced address (exempli gratia the @@ -152,7 +150,8 @@ sparc_ravenscar_prepare_to_store (struct regcache *regcache) thread. */ static void -sparc_ravenscar_store_registers (struct regcache *regcache, int regnum) +sparc_ravenscar_store_registers (struct regcache *regcache, ptid_t ptid, + int regnum) { struct gdbarch *gdbarch = get_regcache_arch (regcache); int buf_size = register_size (gdbarch, regnum); @@ -160,8 +159,7 @@ sparc_ravenscar_store_registers (struct regcache *regcache, int regnum) ULONGEST register_address; if (register_in_thread_descriptor_p (regnum)) - register_address = - ptid_get_tid (inferior_ptid) + sparc_register_offsets [regnum]; + register_address = ptid_get_tid (ptid) + sparc_register_offsets [regnum]; else if (register_on_stack_p (regnum)) { regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, diff --git a/gdb/spu-linux-nat.c b/gdb/spu-linux-nat.c index c5b91222c1..a0b28219cf 100644 --- a/gdb/spu-linux-nat.c +++ b/gdb/spu-linux-nat.c @@ -534,7 +534,8 @@ spu_fetch_inferior_registers (struct target_ops *ops, /* Override the store_inferior_register routine. */ static void spu_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regno) + struct regcache *regcache, + ptid_t ptid, int regno) { int fd; ULONGEST addr; diff --git a/gdb/spu-multiarch.c b/gdb/spu-multiarch.c index 6516a10b76..a07909885e 100644 --- a/gdb/spu-multiarch.c +++ b/gdb/spu-multiarch.c @@ -196,7 +196,7 @@ spu_fetch_registers (struct target_ops *ops, struct regcache *regcache, /* Override the to_store_registers routine. */ static void spu_store_registers (struct target_ops *ops, - struct regcache *regcache, int regno) + struct regcache *regcache, ptid_t ptid, int regno) { struct gdbarch *gdbarch = get_regcache_arch (regcache); struct target_ops *ops_beneath = find_target_beneath (ops); @@ -206,12 +206,12 @@ spu_store_registers (struct target_ops *ops, /* This version applies only if we're currently in spu_run. */ if (gdbarch_bfd_arch_info (gdbarch)->arch != bfd_arch_spu) { - ops_beneath->to_store_registers (ops_beneath, regcache, regno); + ops_beneath->to_store_registers (ops_beneath, regcache, ptid, regno); return; } /* We must be stopped on a spu_run system call. */ - if (!parse_spufs_run (inferior_ptid, &spufs_fd, &spufs_addr)) + if (!parse_spufs_run (ptid, &spufs_fd, &spufs_addr)) return; /* The NPC register is found in PPC memory at SPUFS_ADDR. */ diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c index 01ab150e3a..3f1c236d8f 100644 --- a/gdb/target-delegates.c +++ b/gdb/target-delegates.c @@ -187,29 +187,31 @@ debug_fetch_registers (struct target_ops *self, struct regcache *arg1, ptid_t ar } static void -delegate_store_registers (struct target_ops *self, struct regcache *arg1, int arg2) +delegate_store_registers (struct target_ops *self, struct regcache *arg1, ptid_t arg2, int arg3) { self = self->beneath; - self->to_store_registers (self, arg1, arg2); + self->to_store_registers (self, arg1, arg2, arg3); } static void -tdefault_store_registers (struct target_ops *self, struct regcache *arg1, int arg2) +tdefault_store_registers (struct target_ops *self, struct regcache *arg1, ptid_t arg2, int arg3) { noprocess (); } static void -debug_store_registers (struct target_ops *self, struct regcache *arg1, int arg2) +debug_store_registers (struct target_ops *self, struct regcache *arg1, ptid_t arg2, int arg3) { fprintf_unfiltered (gdb_stdlog, "-> %s->to_store_registers (...)\n", debug_target.to_shortname); - debug_target.to_store_registers (&debug_target, arg1, arg2); + debug_target.to_store_registers (&debug_target, arg1, arg2, arg3); fprintf_unfiltered (gdb_stdlog, "<- %s->to_store_registers (", debug_target.to_shortname); target_debug_print_struct_target_ops_p (&debug_target); fputs_unfiltered (", ", gdb_stdlog); target_debug_print_struct_regcache_p (arg1); fputs_unfiltered (", ", gdb_stdlog); - target_debug_print_int (arg2); + target_debug_print_ptid_t (arg2); + fputs_unfiltered (", ", gdb_stdlog); + target_debug_print_int (arg3); fputs_unfiltered (")\n", gdb_stdlog); } diff --git a/gdb/target.c b/gdb/target.c index e57789f15f..6ce0921ac0 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -3593,12 +3593,12 @@ target_fetch_registers (struct regcache *regcache, ptid_t ptid, int regno) } void -target_store_registers (struct regcache *regcache, int regno) +target_store_registers (struct regcache *regcache, ptid_t ptid, int regno) { if (!may_write_registers) error (_("Writing to registers is not allowed (regno %d)"), regno); - current_target.to_store_registers (¤t_target, regcache, regno); + current_target.to_store_registers (¤t_target, regcache, ptid, regno); if (targetdebug) { debug_print_register ("target_store_registers", regcache, regno); diff --git a/gdb/target.h b/gdb/target.h index 24a138ff67..d6c07ad44d 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -471,7 +471,8 @@ struct target_ops void (*to_fetch_registers) (struct target_ops *, struct regcache *, ptid_t, int) TARGET_DEFAULT_IGNORE (); - void (*to_store_registers) (struct target_ops *, struct regcache *, int) + void (*to_store_registers) (struct target_ops *, struct regcache *, ptid_t, + int) TARGET_DEFAULT_NORETURN (noprocess ()); void (*to_prepare_to_store) (struct target_ops *, struct regcache *) TARGET_DEFAULT_NORETURN (noprocess ()); @@ -1391,7 +1392,8 @@ extern void target_fetch_registers (struct regcache *regcache, ptid_t ptid, It can store as many registers as it wants to, so target_prepare_to_store must have been previously called. Calls error() if there are problems. */ -extern void target_store_registers (struct regcache *regcache, int regs); +extern void target_store_registers (struct regcache *regcache, ptid_t ptid, + int regs); /* Get ready to modify the registers array. On machines which store individual registers, this doesn't need to do anything. On machines diff --git a/gdb/tilegx-linux-nat.c b/gdb/tilegx-linux-nat.c index 5c47a3e075..f3e747b570 100644 --- a/gdb/tilegx-linux-nat.c +++ b/gdb/tilegx-linux-nat.c @@ -144,14 +144,15 @@ fetch_inferior_registers (struct target_ops *ops, static void store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { elf_gregset_t regs; int tid; - tid = ptid_get_lwp (inferior_ptid); + tid = ptid_get_lwp (ptid); if (tid == 0) - tid = ptid_get_pid (inferior_ptid); + tid = ptid_get_pid (ptid); if (ptrace (PTRACE_GETREGS, tid, 0, (PTRACE_TYPE_ARG3) ®s) < 0) perror_with_name (_("Couldn't get registers")); diff --git a/gdb/vax-bsd-nat.c b/gdb/vax-bsd-nat.c index 8d1cdf4856..dfc8c8c738 100644 --- a/gdb/vax-bsd-nat.c +++ b/gdb/vax-bsd-nat.c @@ -81,17 +81,18 @@ vaxbsd_fetch_inferior_registers (struct target_ops *ops, static void vaxbsd_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { struct reg regs; - if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid), + if (ptrace (PT_GETREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't get registers")); vaxbsd_collect_gregset (regcache, ®s, regnum); - if (ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid), + if (ptrace (PT_SETREGS, ptid_get_pid (ptid), (PTRACE_TYPE_ARG3) ®s, 0) == -1) perror_with_name (_("Couldn't write registers")); } diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index c930a37ce3..5094c69871 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -559,9 +559,10 @@ do_windows_store_inferior_registers (const struct regcache *regcache, /* Store a new register value into the current thread context. */ static void windows_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int r) + struct regcache *regcache, + ptid_t ptid, int r) { - windows_thread_info *th = thread_rec (ptid_get_tid (inferior_ptid), TRUE); + windows_thread_info *th = thread_rec (ptid_get_tid (ptid), TRUE); /* Check if current_thread exists. Windows sometimes uses a non-existent thread id in its events. */ diff --git a/gdb/xtensa-linux-nat.c b/gdb/xtensa-linux-nat.c index 688ed5c7d6..467c24968a 100644 --- a/gdb/xtensa-linux-nat.c +++ b/gdb/xtensa-linux-nat.c @@ -187,13 +187,13 @@ fetch_gregs (struct regcache *regcache, ptid_t ptid, int regnum) supply_gregset_reg (regcache, ®s, regnum); } -/* Store greg-register(s) in GDB's register - array into the process/thread specified by TID. */ +/* Store greg-register(s) in REGCACHE into the process/thread specified by + PTID. */ static void -store_gregs (struct regcache *regcache, int regnum) +store_gregs (struct regcache *regcache, ptid_t ptid, int regnum) { - int tid = ptid_get_lwp (inferior_ptid); + int tid = ptid_get_lwp (ptid); gdb_gregset_t regs; int areg; @@ -235,9 +235,9 @@ fetch_xtregs (struct regcache *regcache, ptid_t ptid, int regnum) } static void -store_xtregs (struct regcache *regcache, int regnum) +store_xtregs (struct regcache *regcache, ptid_t ptid, int regnum) { - int tid = ptid_get_lwp (inferior_ptid); + int tid = ptid_get_lwp (ptid); const xtensa_regtable_t *ptr; char xtregs [XTENSA_ELF_XTREG_SIZE]; @@ -271,17 +271,18 @@ xtensa_linux_fetch_inferior_registers (struct target_ops *ops, static void xtensa_linux_store_inferior_registers (struct target_ops *ops, - struct regcache *regcache, int regnum) + struct regcache *regcache, + ptid_t ptid, int regnum) { if (regnum == -1) { - store_gregs (regcache, regnum); - store_xtregs (regcache, regnum); + store_gregs (regcache, ptid, regnum); + store_xtregs (regcache, ptid, regnum); } else if ((regnum < xtreg_lo) || (regnum > xtreg_high)) - store_gregs (regcache, regnum); + store_gregs (regcache, ptid, regnum); else - store_xtregs (regcache, regnum); + store_xtregs (regcache, ptid, regnum); } /* Called by libthread_db. */