From: Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com>
To: gdb-patches@sourceware.org
Subject: [PATCH 8/8] [PowerPC] Recognize isa205 in linux core files
Date: Thu, 10 May 2018 20:00:00 -0000 [thread overview]
Message-ID: <20180510195840.17734-9-pedromfc@linux.vnet.ibm.com> (raw)
In-Reply-To: <20180510195840.17734-1-pedromfc@linux.vnet.ibm.com>
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 <pedromfc@linux.vnet.ibm.com>
* 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. Check if target_auxv_search returns a value greater than
zero instead of non-zero.
(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 <pedromfc@linux.vnet.ibm.com>
* 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 | 9 +--
gdb/ppc-linux-tdep.c | 6 ++
gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp | 93 ++++++++++++++++++++++++++
5 files changed, 106 insertions(+), 6 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 cef9283121..e04e807ecb 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 d0849e7c04..90519ff3fa 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 59c5f0c4b9..c79fcd4ab3 100644
--- a/gdb/ppc-linux-nat.c
+++ b/gdb/ppc-linux-nat.c
@@ -1165,13 +1165,13 @@ 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) > 0)
+ return field;
return 0;
}
@@ -2233,7 +2233,8 @@ ppc_linux_nat_target::read_description ()
}
struct ppc_linux_features features = ppc_linux_no_features;
- unsigned long hwcap = ppc_linux_get_hwcap ();
+
+ CORE_ADDR hwcap = ppc_linux_get_hwcap ();
features.wordsize = ppc_linux_target_wordsize (tid);
diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c
index 54de34d0b7..df8e04cd90 100644
--- a/gdb/ppc-linux-tdep.c
+++ b/gdb/ppc-linux-tdep.c
@@ -1065,6 +1065,12 @@ ppc_linux_core_read_description (struct gdbarch *gdbarch,
if (vsx)
features.vsx = true;
+ CORE_ADDR hwcap = 0;
+
+ target_auxv_search (target, AT_HWCAP, &hwcap);
+
+ 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 <http://www.gnu.org/licenses/>.
+
+# 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
+}
--
2.13.6
next prev parent reply other threads:[~2018-05-10 19:59 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-10 19:59 [PATCH 0/8] [PowerPC] Miscellaneous fixes for register access Pedro Franco de Carvalho
2018-05-10 19:59 ` [PATCH 1/8] [PowerPC] Consolidate linux target description selection Pedro Franco de Carvalho
2018-05-16 14:05 ` Ulrich Weigand
2018-05-16 22:50 ` Pedro Franco de Carvalho
2018-05-17 8:28 ` Ulrich Weigand
2018-05-10 19:59 ` [PATCH 3/8] [PowerPC] Disable regsets using zero sizes in gdbserver Pedro Franco de Carvalho
2018-05-16 16:17 ` Ulrich Weigand
2018-05-10 19:59 ` [PATCH 4/8] [PowerPC] Consolidate linux vector regset sizes Pedro Franco de Carvalho
2018-05-16 16:35 ` Ulrich Weigand
2018-05-10 20:00 ` Pedro Franco de Carvalho [this message]
2018-05-16 15:53 ` [PATCH 8/8] [PowerPC] Recognize isa205 in linux core files Ulrich Weigand
2018-05-16 23:32 ` Pedro Franco de Carvalho
2018-05-17 10:22 ` Ulrich Weigand
2018-05-21 20:46 ` Pedro Franco de Carvalho
2018-05-22 12:48 ` Ulrich Weigand
2018-05-22 14:33 ` Pedro Franco de Carvalho
2018-05-10 20:33 ` [PATCH 6/8] [PowerPC] Fix VSX registers " Pedro Franco de Carvalho
2018-05-16 14:18 ` Ulrich Weigand
2018-05-10 20:33 ` [PATCH 2/8] [PowerPC] Consolidate wordsize getter between native and gdbserver Pedro Franco de Carvalho
2018-05-16 15:54 ` Ulrich Weigand
2018-05-10 21:46 ` [PATCH 5/8] [PowerPC] Fix access to VSCR in linux targets Pedro Franco de Carvalho
2018-05-16 14:06 ` Ulrich Weigand
2018-05-17 21:25 ` Pedro Franco de Carvalho
2018-05-18 15:37 ` Ulrich Weigand
2018-05-21 20:46 ` Pedro Franco de Carvalho
2018-05-22 12:56 ` Ulrich Weigand
2018-05-10 22:25 ` [PATCH 7/8] [PowerPC] Fix inclusion of dfp pseudoregs in tdep Pedro Franco de Carvalho
2018-05-16 14:18 ` Ulrich Weigand
2018-05-21 20:46 ` [PATCH v2 1/8] [PowerPC] Consolidate linux target description selection Pedro Franco de Carvalho
2018-05-21 20:46 ` [PATCH v2 4/8] [PowerPC] Consolidate linux vector regset sizes Pedro Franco de Carvalho
2018-05-22 12:48 ` Ulrich Weigand
2018-05-21 20:46 ` [PATCH v2 3/8] [PowerPC] Disable regsets using zero sizes in gdbserver Pedro Franco de Carvalho
2018-05-22 12:48 ` Ulrich Weigand
2018-05-21 20:46 ` [PATCH v2 2/8] [PowerPC] Consolidate wordsize getter between native and gdbserver Pedro Franco de Carvalho
2018-05-22 12:56 ` Ulrich Weigand
2018-05-21 23:45 ` [PATCH v2 5/8] [PowerPC] Fix access to VSCR in linux targets Pedro Franco de Carvalho
2018-05-22 12:56 ` Ulrich Weigand
2018-05-21 23:55 ` [PATCH v2 8/8] [PowerPC] Recognize isa205 in linux core files Pedro Franco de Carvalho
2018-05-22 13:34 ` Ulrich Weigand
2018-05-21 23:56 ` [PATCH v2 7/8] [PowerPC] Fix inclusion of dfp pseudoregs in tdep Pedro Franco de Carvalho
2018-05-22 12:56 ` Ulrich Weigand
2018-05-22 0:54 ` [PATCH v2 6/8] [PowerPC] Fix VSX registers in linux core files Pedro Franco de Carvalho
2018-05-22 13:46 ` Ulrich Weigand
2018-05-22 12:48 ` [PATCH v2 1/8] [PowerPC] Consolidate linux target description selection Ulrich Weigand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180510195840.17734-9-pedromfc@linux.vnet.ibm.com \
--to=pedromfc@linux.vnet.ibm.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox