* RFA: Testcase for E500 prologue analysis
@ 2004-05-14 22:22 Jim Blandy
0 siblings, 0 replies; only message in thread
From: Jim Blandy @ 2004-05-14 22:22 UTC (permalink / raw)
To: gdb-patches
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
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2004-05-14 22:22 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-05-14 22:22 RFA: Testcase for E500 prologue analysis Jim Blandy
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox