From 8172766a9309627ee68f193fc5443af78f1d8f85 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Tue, 29 Sep 2009 19:24:46 +0000 Subject: [PATCH] gdb/testsuite/ * gdb.base/breakpoint-shadow.exp: Move the ia64 part into ... * gdb.arch/ia64-breakpoint-shadow.exp: ... a new file, with new tests. * gdb.arch/ia64-breakpoint-shadow.S: New file. --- gdb/testsuite/ChangeLog | 6 ++ .../gdb.arch/ia64-breakpoint-shadow.S | 44 ++++++++++ .../gdb.arch/ia64-breakpoint-shadow.exp | 80 +++++++++++++++++++ gdb/testsuite/gdb.base/breakpoint-shadow.exp | 24 +----- 4 files changed, 131 insertions(+), 23 deletions(-) create mode 100644 gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S create mode 100644 gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 96f313a8799..7297f0c9879 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2009-09-29 Jan Kratochvil + + * gdb.base/breakpoint-shadow.exp: Move the ia64 part into ... + * gdb.arch/ia64-breakpoint-shadow.exp: ... a new file, with new tests. + * gdb.arch/ia64-breakpoint-shadow.S: New file. + 2009-09-29 Ulrich Weigand * gdb.objc/basicclass.exp: Disable pending breakpoint query. diff --git a/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S b/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S new file mode 100644 index 00000000000..ad88286e186 --- /dev/null +++ b/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.S @@ -0,0 +1,44 @@ +/* Copyright 2009 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 . + + This file is part of the gdb testsuite. + It tests displaced stepping over various insns that require special + handling. */ + + .text + .align 16 + .global main + .proc main +main: + mov r2=r12 + mov r14=1 + ;; +bundle: + /* Store value 1 into `long' variable on stack. */ + st8.rel [r2]=r14 + /* This long constant requires L-X slot in this bundle. */ + movl r14=0x7fffffff + ;; + /* Store value 0x7fffffff into `long' variable on stack. */ + st8.rel [r2]=r14 + mov r14=r0 + ;; + mov r8=r14 + mov r12=r2 + br.ret.sptk.many b0 + + .endp main + + .section .note.GNU-stack,"",@progbits diff --git a/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp b/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp new file mode 100644 index 00000000000..3d26c478444 --- /dev/null +++ b/gdb/testsuite/gdb.arch/ia64-breakpoint-shadow.exp @@ -0,0 +1,80 @@ +# Copyright 2009 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 . + +if ![istarget "ia64-*-*"] { + verbose "Skipping ia64-breakpoint-shadow test." + return +} + +set testfile ia64-breakpoint-shadow +set srcfile ${testfile}.S +set binfile ${objdir}/${subdir}/${testfile} +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + untested "Couldn't compile test program" + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +# We need to start the inferior to place the breakpoints in the memory at all. +if ![runto_main] { + untested start + return -1 +} + +# The default "auto" mode removes all the breakpoints when we stop (and not +# running the nonstop mode). We would not be able to test the shadow. +gdb_test "set breakpoint always-inserted on" +gdb_test "show breakpoint always-inserted" "Always inserted breakpoint mode is on." + +set match "\nDump of assembler code for function main:\r\n(.*)End of assembler dump.\r\n$gdb_prompt $" + +set test "disassembly without breakpoints" +gdb_test_multiple "disass main" $test { + -re $match { + set orig $expect_out(1,string) + pass $test + } +} + +set test "slot 0 breakpoint placed" +gdb_test_multiple "b bundle" $test { + -re "Breakpoint \[0-9\] at (0x\[0-9a-f\]*0):.*$gdb_prompt $" { + pass $test + set bpt2address $expect_out(1,string) + } +} + +if ![info exists bpt2address] { + return -1 +} + +gdb_test "b *($bpt2address + 1)" "Breakpoint \[0-9\] at .*" "slot 1 breakpoint placed" +gdb_test "b *($bpt2address + 2)" "Can't insert breakpoint for non-existing slot X" "slot 2 (slot X) breakpoint refusal" + +set test "disassembly with breakpoints" +gdb_test_multiple "disass main" $test { + -re $match { + set got $expect_out(1,string) + if [string equal -nocase $orig $got] { + pass $test + } else { + fail $test + } + } +} diff --git a/gdb/testsuite/gdb.base/breakpoint-shadow.exp b/gdb/testsuite/gdb.base/breakpoint-shadow.exp index a787bb690b4..fcc50dd4730 100644 --- a/gdb/testsuite/gdb.base/breakpoint-shadow.exp +++ b/gdb/testsuite/gdb.base/breakpoint-shadow.exp @@ -48,29 +48,7 @@ gdb_test_multiple "disass main" $test { } gdb_test "b [gdb_get_line_number "break-first"]" "Breakpoint \[0-9\] at .*" "First breakpoint placed" -set test "Second breakpoint placed" -gdb_test_multiple "b [gdb_get_line_number "break-second"]" $test { - -re "Breakpoint \[0-9\] at (0x\[0-9a-f\]*):.*$gdb_prompt $" { - pass $test - set bpt2address $expect_out(1,string) - } -} - -if [istarget "ia64-*-*"] then { - # Unoptimized code should not use the 3rd slot for the first instruction of - # a source line. This is important for our test, because we want both - # breakpoints ("Second breakpoint" and the following one) to be in the same - # bundle. - - set test "Second breakpoint address is valid on ia64" - if [string match "*\[01\]" $bpt2address] { - pass $test - - gdb_test "b *($bpt2address + 1)" "Breakpoint \[0-9\] at .*" "Third breakpoint on ia64 in the Second breakpoint's bundle" - } else { - unresolved $test - } -} +gdb_test "b [gdb_get_line_number "break-second"]" "Breakpoint \[0-9\] at .*" "Second breakpoint placed" set test "disassembly with breakpoints" gdb_test_multiple "disass main" $test { -- 2.30.2