1# Copyright 2004, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 2# 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15# 16# This file is part of the gdb testsuite. 17 18if $tracelevel { 19 strace $tracelevel 20} 21 22# Test PowerPC E500 prologue analyzer. 23 24 25if ![istarget "powerpc-*"] then { 26 verbose "Skipping powerpc E500 prologue tests." 27 return 28} 29 30set testfile "e500-prologue" 31set srcfile ${testfile}.c 32set binfile ${objdir}/${subdir}/${testfile} 33if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {}] != "" } { 34 unsupported "Testcase compile failed." 35 return -1 36} 37 38gdb_exit 39gdb_start 40gdb_reinitialize_dir $srcdir/$subdir 41gdb_load ${binfile} 42 43# Insert a breakpoint in FUNCTION and verifies that the breakpoint was 44# inserted at the expected location. EXPECTED_LOCATION should be an 45# offset relative to the function start address. 46proc insert_breakpoint {function expected_location} { 47 global gdb_prompt 48 global expect_out 49 global hex 50 51 set address "" 52 53 # Insert a breakpoint using the given function name, and extract 54 # the breakpoint address for the output. 55 gdb_test_multiple "break $function" "set breakpoint in $function" { 56 -re "Breakpoint 1 at ($hex).*$gdb_prompt $" { 57 set address $expect_out(1,string) 58 } 59 default { 60 fail "set breakpoint in $function" 61 } 62 } 63 64 # If we managed to get the breakpoing address, then check that 65 # we inserted it at the expected location by examining the 66 # instruction at that address (we're not interested in the insn 67 # itself, but rather at the address printed at the begining of 68 # the instruction). 69 if { $address != "" } then { 70 gdb_test "x /i $address" \ 71 ".*<$function\\+$expected_location>.*" \ 72 "check $function breakpoint address" 73 } else { 74 fail "unable to compute breakpoint address" 75 } 76 77} 78 79insert_breakpoint "arg_passing_test2" 40 80