From patchwork Fri Jul 13 13:52:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Franco de Carvalho X-Patchwork-Id: 28383 Received: (qmail 14528 invoked by alias); 13 Jul 2018 14:49:29 -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 14514 invoked by uid 89); 13 Jul 2018 14:49:29 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-27.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mx0a-001b2d01.pphosted.com Received: from mx0b-001b2d01.pphosted.com (HELO mx0a-001b2d01.pphosted.com) (148.163.158.5) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 13 Jul 2018 14:49:25 +0000 Received: from pps.filterd (m0098420.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w6DDnuhX064759 for ; Fri, 13 Jul 2018 09:53:39 -0400 Received: from e15.ny.us.ibm.com (e15.ny.us.ibm.com [129.33.205.205]) by mx0b-001b2d01.pphosted.com with ESMTP id 2k6ub3wfa1-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 13 Jul 2018 09:53:38 -0400 Received: from localhost by e15.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 13 Jul 2018 09:53:37 -0400 Received: from b01cxnp22035.gho.pok.ibm.com (9.57.198.25) by e15.ny.us.ibm.com (146.89.104.202) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Fri, 13 Jul 2018 09:53:34 -0400 Received: from b01ledav006.gho.pok.ibm.com (b01ledav006.gho.pok.ibm.com [9.57.199.111]) by b01cxnp22035.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w6DDrXmr11010596 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 13 Jul 2018 13:53:33 GMT Received: from b01ledav006.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5178FAC059; Fri, 13 Jul 2018 09:54:28 -0400 (EDT) Received: from b01ledav006.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 02124AC05B; Fri, 13 Jul 2018 09:54:28 -0400 (EDT) Received: from pedro.localdomain (unknown [9.85.180.127]) by b01ledav006.gho.pok.ibm.com (Postfix) with ESMTP; Fri, 13 Jul 2018 09:54:27 -0400 (EDT) Received: by pedro.localdomain (Postfix, from userid 1000) id 36DF83C04D4; Fri, 13 Jul 2018 10:53:25 -0300 (-03) From: Pedro Franco de Carvalho To: gdb-patches@sourceware.org Cc: uweigand@de.ibm.com, edjunior@gmail.com Subject: [PATCH 17/17] [PowerPC] Add gdbserver support for EBB and PMU registers Date: Fri, 13 Jul 2018 10:52:26 -0300 In-Reply-To: <20180713135226.2321-1-pedromfc@linux.ibm.com> References: <20180713135226.2321-1-pedromfc@linux.ibm.com> x-cbid: 18071313-0068-0000-0000-00000317B036 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00009363; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000266; SDB=6.01060763; UDB=6.00544526; IPR=6.00838681; MB=3.00022128; MTD=3.00000008; XFM=3.00000015; UTC=2018-07-13 13:53:36 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18071313-0069-0000-0000-00004504980A Message-Id: <20180713135226.2321-18-pedromfc@linux.ibm.com> This patch extends support for EBB and PMU registers to the powerpc linux gdbserver stub. gdb/gdbserver/ChangeLog: YYYY-MM-DD Pedro Franco de Carvalho * linux-ppc-low.c (ppc_store_ebbregset, ppc_store_pmuregset): New functions. (ppc_regsets): Add entries for ebb and pmu regsets. (ppc_arch_setup): Set isa207 in features struct if the ebb and pmu regsets are available. Set sizes for these regsets. --- gdb/gdbserver/linux-ppc-low.c | 50 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/gdb/gdbserver/linux-ppc-low.c b/gdb/gdbserver/linux-ppc-low.c index 2c830d638a..9d1845088b 100644 --- a/gdb/gdbserver/linux-ppc-low.c +++ b/gdb/gdbserver/linux-ppc-low.c @@ -526,6 +526,38 @@ ppc_store_tarregset (struct regcache *regcache, const void *buf) } static void +ppc_store_ebbregset (struct regcache *regcache, const void *buf) +{ + int base; + char *regset = (char *) buf; + + base = find_regno (regcache->tdesc, "bescr"); + + /* The order in the kernel regset is: EBBRR, EBBHR, BESCR, in our + .dat file it is BESCR, EBBHR, EBBRR. */ + supply_register (regcache, base, ®set[16]); + supply_register (regcache, base + 1, ®set[8]); + supply_register (regcache, base + 2, ®set[0]); +} + +static void +ppc_store_pmuregset (struct regcache *regcache, const void *buf) +{ + int base; + char *regset = (char *) buf; + + base = find_regno (regcache->tdesc, "mmcr0"); + + /* The order in the kernel regset is SIAR, SDAR, SIER, MMCR2, MMCR0. + In the .dat file is MMCR0, MMCR2, SIAR, SDAR, SIER. */ + supply_register (regcache, base, ®set[32]); + supply_register (regcache, base + 1, ®set[24]); + supply_register (regcache, base + 2, ®set[0]); + supply_register (regcache, base + 3, ®set[8]); + supply_register (regcache, base + 4, ®set[16]); +} + +static void ppc_fill_tm_sprregset (struct regcache *regcache, void *buf) { int i, base; @@ -775,6 +807,10 @@ static struct regset_info ppc_regsets[] = { NULL, ppc_store_tm_cgprregset }, { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TM_SPR, 0, EXTENDED_REGS, ppc_fill_tm_sprregset, ppc_store_tm_sprregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_EBB, 0, EXTENDED_REGS, + NULL, ppc_store_ebbregset }, + { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_PMU, 0, EXTENDED_REGS, + NULL, ppc_store_pmuregset }, { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_TAR, 0, EXTENDED_REGS, ppc_fill_tarregset, ppc_store_tarregset }, { PTRACE_GETREGSET, PTRACE_SETREGSET, NT_PPC_PPR, 0, EXTENDED_REGS, @@ -856,7 +892,11 @@ ppc_arch_setup (void) if ((ppc_hwcap2 & PPC_FEATURE2_ARCH_2_07) && (ppc_hwcap2 & PPC_FEATURE2_TAR) && ppc_check_regset (tid, NT_PPC_TAR, - PPC_LINUX_SIZEOF_TARREGSET)) + PPC_LINUX_SIZEOF_TARREGSET) + && ppc_check_regset (tid, NT_PPC_EBB, + PPC_LINUX_SIZEOF_EBBREGSET) + && ppc_check_regset (tid, NT_PPC_PMU, + PPC_LINUX_SIZEOF_PMUREGSET)) { features.isa207 = true; if ((ppc_hwcap2 & PPC_FEATURE2_HTM) @@ -925,6 +965,14 @@ ppc_arch_setup (void) regset->size = (features.isa207 ? PPC_LINUX_SIZEOF_TARREGSET : 0); break; + case NT_PPC_EBB: + regset->size = (features.isa207 ? + PPC_LINUX_SIZEOF_EBBREGSET : 0); + break; + case NT_PPC_PMU: + regset->size = (features.isa207 ? + PPC_LINUX_SIZEOF_PMUREGSET : 0); + break; case NT_PPC_TM_SPR: regset->size = (features.htm ? PPC_LINUX_SIZEOF_TM_SPRREGSET : 0);