This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
RFA: Testcase for E500 prologue analysis
- From: Jim Blandy <jimb at redhat dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: 14 May 2004 17:22:28 -0500
- Subject: RFA: Testcase for E500 prologue analysis
2004-05-14 Jim Blandy <jimb@redhat.com>
* gdb.arch/e500-prologue.exp, gdb.arch/e500-prologue.c: New tests.
Index: gdb/testsuite/gdb.arch/e500-prologue.c
===================================================================
RCS file: gdb/testsuite/gdb.arch/e500-prologue.c
diff -N gdb/testsuite/gdb.arch/e500-prologue.c
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- gdb/testsuite/gdb.arch/e500-prologue.c 14 May 2004 22:22:00 -0000
***************
*** 0 ****
--- 1,54 ----
+ /* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2004 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 2 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, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+ void arg_passing_test2 (void);
+
+ int
+ main (void)
+ {
+ arg_passing_test2 ();
+ return 0;
+ }
+
+
+ /* Asm for procedure arg_passing_test2.
+
+ The challenge here is getting past the 'mr 0,3' and 'stb'
+ instructions. */
+
+ asm (" .section \".text\""
+ " .align 2\n"
+ " .globl arg_passing_test2\n"
+ " .type arg_passing_test2, @function\n"
+ "arg_passing_test2:\n"
+ " stwu 1,-64(1)\n"
+ " stw 31,60(1)\n"
+ " mr 31,1\n"
+ " mr 0,3\n"
+ " evstdd 4,16(31)\n"
+ " stw 5,24(31)\n"
+ " stw 7,32(31)\n"
+ " stw 8,36(31)\n"
+ " stw 9,40(31)\n"
+ " stb 0,8(31)\n"
+ " lwz 11,0(1)\n"
+ " lwz 31,-4(11)\n"
+ " mr 1,11\n"
+ " blr\n"
+ " .size arg_passing_test2, .-arg_passing_test2\n");
Index: gdb/testsuite/gdb.arch/e500-prologue.exp
===================================================================
RCS file: gdb/testsuite/gdb.arch/e500-prologue.exp
diff -N gdb/testsuite/gdb.arch/e500-prologue.exp
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- gdb/testsuite/gdb.arch/e500-prologue.exp 14 May 2004 22:22:00 -0000
***************
*** 0 ****
--- 1,82 ----
+ # Copyright 2004 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 2 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, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ #
+ # This file is part of the gdb testsuite.
+
+ if $tracelevel {
+ strace $tracelevel
+ }
+
+ # Test PowerPC E500 prologue analyzer.
+
+ set prms_id 0
+ set bug_id 0
+
+ if ![istarget "powerpc-*"] then {
+ verbose "Skipping powerpc E500 prologue tests."
+ return
+ }
+
+ set testfile "e500-prologue"
+ set srcfile ${testfile}.c
+ set binfile ${objdir}/${subdir}/${testfile}
+ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {}] != "" } {
+ unsupported "Testcase compile failed."
+ return -1
+ }
+
+ gdb_exit
+ gdb_start
+ gdb_reinitialize_dir $srcdir/$subdir
+ gdb_load ${binfile}
+
+ # Insert a breakpoint in FUNCTION and verifies that the breakpoint was
+ # inserted at the expected location. EXPECTED_LOCATION should be an
+ # offset relative to the function start address.
+ proc insert_breakpoint {function expected_location} {
+ global gdb_prompt
+ global expect_out
+ global hex
+
+ set address ""
+
+ # Insert a breakpoint using the given function name, and extract
+ # the breakpoint address for the output.
+ gdb_test_multiple "break $function" "set breakpoint in $function" {
+ -re "Breakpoint 1 at ($hex).*$gdb_prompt $" {
+ set address $expect_out(1,string)
+ }
+ default {
+ fail "set breakpoint in $function"
+ }
+ }
+
+ # If we managed to get the breakpoing address, then check that
+ # we inserted it at the expected location by examining the
+ # instruction at that address (we're not interested in the insn
+ # itself, but rather at the address printed at the begining of
+ # the instruction).
+ if { $address != "" } then {
+ gdb_test "x /i $address" \
+ ".*<$function\\+$expected_location>.*" \
+ "check $function breakpoint address"
+ } else {
+ fail "unable to compute breakpoint address"
+ }
+
+ }
+
+ insert_breakpoint "arg_passing_test2" 40