From patchwork Mon May 21 20:44:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: pedromfc X-Patchwork-Id: 27378 Received: (qmail 13546 invoked by alias); 21 May 2018 20:46:17 -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 13063 invoked by uid 89); 21 May 2018 20:45:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.7 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, KAM_SHORT, NO_DNS_FOR_FROM, RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.2 spammy=aux 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; Mon, 21 May 2018 20:45:55 +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 w4LKiYOx030863 for ; Mon, 21 May 2018 16:45:53 -0400 Received: from e14.ny.us.ibm.com (e14.ny.us.ibm.com [129.33.205.204]) by mx0b-001b2d01.pphosted.com with ESMTP id 2j42nc6fgt-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 21 May 2018 16:45:53 -0400 Received: from localhost by e14.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 21 May 2018 16:45:52 -0400 Received: from b01cxnp23033.gho.pok.ibm.com (9.57.198.28) by e14.ny.us.ibm.com (146.89.104.201) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 21 May 2018 16:45:51 -0400 Received: from b01ledav004.gho.pok.ibm.com (b01ledav004.gho.pok.ibm.com [9.57.199.109]) by b01cxnp23033.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w4LKjoVO67043346; Mon, 21 May 2018 20:45:50 GMT Received: from b01ledav004.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 49F6F112067; Mon, 21 May 2018 16:45:55 -0400 (EDT) Received: from b01ledav004.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1D9BB112062; Mon, 21 May 2018 16:45:55 -0400 (EDT) Received: from pedro.localdomain (unknown [9.18.235.153]) by b01ledav004.gho.pok.ibm.com (Postfix) with ESMTP; Mon, 21 May 2018 16:45:55 -0400 (EDT) Received: by pedro.localdomain (Postfix, from userid 1000) id 857FC3C03FA; Mon, 21 May 2018 17:45:45 -0300 (-03) From: Pedro Franco de Carvalho To: gdb-patches@sourceware.org Cc: uweigand@de.ibm.com Subject: [PATCH v2 8/8] [PowerPC] Recognize isa205 in linux core files Date: Mon, 21 May 2018 17:44:58 -0300 In-Reply-To: <20180521204458.19070-1-pedromfc@linux.vnet.ibm.com> References: <20180510195840.17734-1-pedromfc@linux.vnet.ibm.com> <20180521204458.19070-1-pedromfc@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 18052120-0052-0000-0000-000002F268B8 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00009062; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000261; SDB=6.01035687; UDB=6.00529760; IPR=6.00814816; MB=3.00021228; MTD=3.00000008; XFM=3.00000015; UTC=2018-05-21 20:45:52 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18052120-0053-0000-0000-00005CC3EDD2 Message-Id: <20180521204458.19070-8-pedromfc@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2018-05-21_08:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=4 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1805210246 X-IsSubscribed: yes Currently the ppc linux core file target doesn't return target descriptions with the lager FPSCR introduced in isa205. This patch changes the core file target so that the auxv is read from the core file to determine the size of FPSCR, so that the appropriate target description is selected. gdb/ChangeLog: yyyy-mm-dd Pedro Franco de Carvalho * arch/ppc-linux-common.c (ppc_linux_has_isa205): Change the parameter type to CORE_ADDR. * arch/ppc-linux-common.h (ppc_linux_has_isa205): Change the parameter type in declaration to CORE_ADDR. * ppc-linux-tdep.c (ppc_linux_core_read_description): Call target_auxv_search to get AT_HWCAP and use the result to get the target description. * ppc-linux-nat.c (ppc_linux_get_hwcap): Change the return type to CORE_ADDR. Remove the cast of the return value to unsigned long. Fix error predicate of target_auxv_search. (ppc_linux_nat_target::read_description): Change the type of the hwcap variable to CORE_ADDR. gdb/testsuite/ChangeLog: yyyy-mm-dd Pedro Franco de Carvalho * gdb.arch/powerpc-fpscr-gcore.exp: New file. --- gdb/arch/ppc-linux-common.c | 2 +- gdb/arch/ppc-linux-common.h | 2 +- gdb/ppc-linux-nat.c | 10 +-- gdb/ppc-linux-tdep.c | 7 ++ gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp | 93 ++++++++++++++++++++++++++ 5 files changed, 107 insertions(+), 7 deletions(-) create mode 100644 gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp diff --git a/gdb/arch/ppc-linux-common.c b/gdb/arch/ppc-linux-common.c index 87ccc42cae..45da105de6 100644 --- a/gdb/arch/ppc-linux-common.c +++ b/gdb/arch/ppc-linux-common.c @@ -31,7 +31,7 @@ #endif bool -ppc_linux_has_isa205 (unsigned long hwcap) +ppc_linux_has_isa205 (CORE_ADDR hwcap) { /* Power ISA 2.05 (implemented by Power 6 and newer processors) increases the FPSCR from 32 bits to 64 bits. Even though Power 7 diff --git a/gdb/arch/ppc-linux-common.h b/gdb/arch/ppc-linux-common.h index 798781cbf7..2f535e801d 100644 --- a/gdb/arch/ppc-linux-common.h +++ b/gdb/arch/ppc-linux-common.h @@ -32,7 +32,7 @@ struct target_desc; #define PPC_LINUX_SIZEOF_VSXREGSET 256 /* Check if the hwcap auxv entry indicates that isa205 is supported. */ -bool ppc_linux_has_isa205 (unsigned long hwcap); +bool ppc_linux_has_isa205 (CORE_ADDR hwcap); /* Features used to determine the target description. */ struct ppc_linux_features diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c index 0f7dd4c8e2..eb21f91c13 100644 --- a/gdb/ppc-linux-nat.c +++ b/gdb/ppc-linux-nat.c @@ -1165,15 +1165,15 @@ store_ppc_registers (const struct regcache *regcache, int tid) } /* Fetch the AT_HWCAP entry from the aux vector. */ -static unsigned long +static CORE_ADDR ppc_linux_get_hwcap (void) { CORE_ADDR field; - if (target_auxv_search (target_stack, AT_HWCAP, &field)) - return (unsigned long) field; + if (target_auxv_search (target_stack, AT_HWCAP, &field) != 1) + return 0; - return 0; + return field; } /* The cached DABR value, to install in new threads. @@ -2236,7 +2236,7 @@ ppc_linux_nat_target::read_description () features.wordsize = ppc_linux_target_wordsize (tid); - unsigned long hwcap = ppc_linux_get_hwcap (); + CORE_ADDR hwcap = ppc_linux_get_hwcap (); if (have_ptrace_getsetvsxregs && (hwcap & PPC_FEATURE_HAS_VSX)) diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c index 293353a878..5716f82810 100644 --- a/gdb/ppc-linux-tdep.c +++ b/gdb/ppc-linux-tdep.c @@ -1058,6 +1058,13 @@ ppc_linux_core_read_description (struct gdbarch *gdbarch, if (vsx) features.vsx = true; + CORE_ADDR hwcap; + + if (target_auxv_search (target, AT_HWCAP, &hwcap) != 1) + hwcap = 0; + + features.isa205 = ppc_linux_has_isa205 (hwcap); + return ppc_linux_match_description (features); } diff --git a/gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp b/gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp new file mode 100644 index 0000000000..d5db5320b6 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp @@ -0,0 +1,93 @@ +# Copyright (C) 2018 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# This file is part of the gdb testsuite. + +# This tests checks that generating and loading a core file preserves +# the correct FPSCR size. + +if {![istarget "powerpc*-*-linux*"]} then { + verbose "Skipping PowerPC test for corefiles with FPSCR." + return +} + +standard_testfile .c + +set gen_src [standard_output_file $srcfile] + +gdb_produce_source $gen_src { + int main() { + return 0; + } +} + +if {[build_executable "compile" $binfile $gen_src] == -1} { + return -1 +} + +clean_restart $binfile + +if ![runto_main] then { + fail "could not run to main" + return -1 +} + +# Check if our target has FPSCR +proc check_fpscr_access {} { + global gdb_prompt + + set test "fpscr register access" + gdb_test_multiple "info reg fpscr" "$test" { + -re "Invalid register.*\r\n$gdb_prompt $" { + unsupported "$test" + return 0 + } + -re "\r\nfpscr.*\r\n$gdb_prompt $" { + pass "$test" + return 1 + } + } + return 0 +} + +if { ![check_fpscr_access] } { + return -1 +} + +set fpscr_size_process [get_integer_valueof "sizeof(\$fpscr)" -1] + +set core_filename [standard_output_file "$testfile.core"] +set core_generated [gdb_gcore_cmd "$core_filename" "generate core file"] + +if { !$core_generated } { + return -1 +} + +clean_restart + +set core_loaded [gdb_core_cmd "$core_filename" "load core file"] + +if { $core_loaded != 1 } { + return -1 +} + +set fpscr_size_corefile [get_integer_valueof "sizeof(\$fpscr)" -2] + +set test "fpscr size matches" +if {$fpscr_size_process == $fpscr_size_corefile} { + pass $test +} else { + fail $test +}