3 changed files with 142 additions and 0 deletions
@ -0,0 +1,55 @@ |
|||
/* 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 li_stw (void); |
|||
|
|||
int |
|||
main (void) |
|||
{ |
|||
li_stw (); |
|||
return 0; |
|||
} |
|||
|
|||
/* Asm for procedure li_stw().
|
|||
|
|||
The purpose of this function is to verify that GDB does not |
|||
include the li insn as part of the function prologue (only part |
|||
of the prologue if part of a pair of insns saving vector registers). |
|||
Similarly, GDB should not include the stw insn following the li insn, |
|||
because the source register is not used for parameter passing. */ |
|||
|
|||
|
|||
asm (" .csect .text[PR]\n" |
|||
" .align 2\n" |
|||
" .lglobl .li_stw\n" |
|||
" .csect li_stw[DS]\n" |
|||
"li_stw:\n" |
|||
" .long .li_stw, TOC[tc0], 0\n" |
|||
" .csect .text[PR]\n" |
|||
".li_stw:\n" |
|||
" stw 31,-4(1)\n" |
|||
" stwu 1,-48(1)\n" |
|||
" mr 31,1\n" |
|||
" stw 11,24(31)\n" |
|||
" li 0,8765\n" |
|||
" stw 0,28(31)\n" |
|||
" lwz 1,0(1)\n" |
|||
" lwz 31,-4(1)\n" |
|||
" blr\n"); |
|||
|
|||
@ -0,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 rs6000 prologue analyzer. |
|||
|
|||
set prms_id 0 |
|||
set bug_id 0 |
|||
|
|||
if ![istarget "powerpc-*-aix*"] then { |
|||
verbose "Skipping powerpc-aix prologue tests." |
|||
return |
|||
} |
|||
|
|||
set testfile "powerpc-aix-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 "li_stw" 12 |
|||
Loading…
Reference in new issue