public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] gdb, testsuite, rs6000: Add powerpc64le prologue test.
@ 2021-05-14 21:16 will schmidt
  2021-05-18 15:10 ` Ulrich Weigand
  0 siblings, 1 reply; 2+ messages in thread
From: will schmidt @ 2021-05-14 21:16 UTC (permalink / raw)
  To: gdb-patches; +Cc: Ulrich Weigand

Hi,
  Add a powerpc64-prologue testcase, This is based on the existing
powerpc-prologue test, but updated (asm) for the powerpc64le target.

   
Thanks,
-Will
    
YYYY-MM-DD  Will Schmidt  <will_schmidt@vnet.ibm.com>

gcc/testsuite/ChangeLog:
        * gdb.arch/powerpc64-prologue.c: New test to exercise prologues
        for the powerpc64le target.
        * gdb.arch/powerpc64-prologue.exp: Test Harness.



diff --git a/gdb/testsuite/gdb.arch/powerpc64-prologue.c b/gdb/testsuite/gdb.arch/powerpc64-prologue.c
new file mode 100644
index 00000000000..acb99574438
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/powerpc64-prologue.c
@@ -0,0 +1,92 @@
+/* Unwinder test program.
+
+   Copyright 2006-2021 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   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/>.  */
+
+#ifdef SYMBOL_PREFIX
+#define SYMBOL(str)	SYMBOL_PREFIX #str
+#else
+#define SYMBOL(str)	#str
+#endif
+
+void gdb2029 (void);
+void optimized_1 (void);
+
+int
+main (void)
+{
+  gdb2029 ();
+  optimized_1 ();
+  return 0;
+}
+
+void
+optimized_1_marker (void)
+{
+}
+
+void
+gdb2029_marker (void)
+{
+}
+
+/* A typical PIC prologue from GCC.  */
+/* This is a ppc64(le) variation of the code as seen
+   in powerpc-prologue.c.  */
+
+asm(".text\n"
+    "	.p2align 3\n"
+    SYMBOL (gdb2029) ":\n"
+    "	mflr	%r0\n"
+    "	std	%r0,16(%r1)\n"
+    "	std	%r31,-8(%r1)\n"
+    "	stdu	%r1,-128(%r1)\n"
+    "	mr	%r31,%r1\n"
+    "	mr	%r9,%r3\n"
+    "	stw	%r9,176(%r31)\n"
+    "	lwz	%r9,176(%r31)\n"
+    "	bl	gdb2029_marker\n"
+    "	nop\n"
+    "	mr	%r9,%r3\n"
+    "	mr	%r3,%r9\n"
+    "	addi	%r1,%r31,128\n"
+    "	ld	%r0,16(%r1)\n"
+    "	mtlr	%r0\n"
+    "	ld	%r31,-8(%r1)\n"
+    "	blr");
+
+/* A heavily scheduled prologue.  */
+asm(".text\n"
+    "	.p2align 3\n"
+    SYMBOL (optimized_1) ":\n"
+    "	stdu	%r1,-32(%r1)\n"
+    "	lis	%r9,-16342\n"
+    "	lis	%r11,-16342\n"
+    "	mflr	%r0\n"
+    "	addi	%r11,%r11,3776\n"
+    "	std	%r30,12(%r1)\n"
+    "	addi	%r31,%r9,3152\n"
+    "	cmplw	%cr7,%r31,%r11\n"
+    "	std	%r0,36(%r1)\n"
+    "	mr	%r30,%r3\n"
+    "	bl	optimized_1_marker\n"
+    "	nop	\n"
+    "	ld	%r0,36(%r1)\n"
+    "	mtlr	%r0\n"
+    "	ld	%r30,12(%r1)\n"
+    "	addi	%r1,%r1,32\n"
+    "	blr");
diff --git a/gdb/testsuite/gdb.arch/powerpc64-prologue.exp b/gdb/testsuite/gdb.arch/powerpc64-prologue.exp
new file mode 100644
index 00000000000..4b01dec9ac6
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/powerpc64-prologue.exp
@@ -0,0 +1,82 @@
+# Copyright 2006-2021 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/>.
+
+# Test PowerPC(64le) prologue analyzer.
+
+# Do not run on AIX (where we won't be able to build the tests without
+# some surgery) or on PowerPC64 (ditto, dot symbols).
+if {[istarget *-*-aix*] || ![istarget "powerpc*-*-*"]} then {
+    verbose "Skipping PowerPC prologue tests."
+    return
+}
+
+standard_testfile .c
+
+# Don't use "debug", so that we don't have line information for the assembly
+# fragments.
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {}] != "" } {
+    untested "PowerPC prologue tests"
+    return -1
+}
+
+if { [prepare_for_testing "failed to prepare" $testfile "$srcfile" \
+      {}] } {
+    return -1
+}
+
+# Run to `main' where we begin our tests.
+if ![runto_main] then {
+    fail "can't run to main"
+    return 0
+}
+
+# Testcase for PIC prologue.
+gdb_breakpoint "gdb2029_marker"
+gdb_test "continue" "Breakpoint $decimal, $hex in gdb2029_marker \\(\\).*" \
+	"continue to PIC"
+
+gdb_test "backtrace 10" \
+	"#0\[ \t\]*$hex in gdb2029_marker.*\r\n#1\[ \t\]*$hex in gdb2029.*\r\n#2\[ \t\]*$hex in main.*" \
+	"backtrace in PIC marker"
+
+gdb_test "finish" ".*$hex in gdb2029 .*" "finish from PIC"
+
+gdb_test "backtrace 10" \
+	"#0\[ \t\]*$hex in gdb2029 .*\r\n#1\[ \t\]*$hex in main.*" \
+	"backtrace in PIC"
+
+gdb_test "info frame" \
+	".*Saved registers:.*r31 at.*pc at.*lr at.*" \
+	"saved registers in PIC"
+
+# Testcase for scheduled prologue.
+gdb_breakpoint "optimized_1_marker"
+gdb_test "continue" "Breakpoint $decimal, $hex in optimized_1_marker \\(\\).*" \
+	"continue to optimized"
+
+gdb_test "backtrace 10" \
+	"#0\[ \t\]*$hex in optimized_1_marker.*\r\n#1\[ \t\]*$hex in optimized_1.*\r\n#2\[ \t\]*$hex in main.*" \
+	"backtrace in optimized marker"
+
+gdb_test "finish" ".*$hex in optimized_1 .*" "finish from optimized"
+
+gdb_test "backtrace 10" \
+	"#0\[ \t\]*$hex in optimized_1 .*\r\n#1\[ \t\]*$hex in main.*" \
+	"backtrace in optimized"
+
+gdb_test "info frame" \
+	".*Saved registers:.*r30 at.*pc at.*lr at.*" \
+	"saved registers in optimized"
+


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] gdb, testsuite, rs6000: Add powerpc64le prologue test.
  2021-05-14 21:16 [PATCH] gdb, testsuite, rs6000: Add powerpc64le prologue test will schmidt
@ 2021-05-18 15:10 ` Ulrich Weigand
  0 siblings, 0 replies; 2+ messages in thread
From: Ulrich Weigand @ 2021-05-18 15:10 UTC (permalink / raw)
  To: will schmidt; +Cc: gdb-patches

On Fri, May 14, 2021 at 04:16:27PM -0500, will schmidt wrote:
> Hi,
>   Add a powerpc64-prologue testcase, This is based on the existing
> powerpc-prologue test, but updated (asm) for the powerpc64le target.
> 
>    
> Thanks,
> -Will
>     
> YYYY-MM-DD  Will Schmidt  <will_schmidt@vnet.ibm.com>
> 
> gcc/testsuite/ChangeLog:
>         * gdb.arch/powerpc64-prologue.c: New test to exercise prologues
>         for the powerpc64le target.
>         * gdb.arch/powerpc64-prologue.exp: Test Harness.

This is OK.

Thanks,
Ulrich

-- 
  Dr. Ulrich Weigand
  GNU/Linux compilers and toolchain
  Ulrich.Weigand@de.ibm.com

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-05-18 15:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-14 21:16 [PATCH] gdb, testsuite, rs6000: Add powerpc64le prologue test will schmidt
2021-05-18 15:10 ` Ulrich Weigand

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).