diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 153339be679..13937de7e20 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2012-08-27 Jan Kratochvil + + * gdb.ada/rdv_wait.exp (set debug-file-directory): New command. + * gdb.arch/i386-cfi-notcurrent.S: New file. + * gdb.arch/i386-cfi-notcurrent.exp: New file. + 2012-08-27 Wei-cheng Wang Yao Qi Pedro Alves diff --git a/gdb/testsuite/gdb.ada/rdv_wait.exp b/gdb/testsuite/gdb.ada/rdv_wait.exp index 67e0f1e8bad..f2b00b7a547 100644 --- a/gdb/testsuite/gdb.ada/rdv_wait.exp +++ b/gdb/testsuite/gdb.ada/rdv_wait.exp @@ -23,6 +23,9 @@ if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } clean_restart ${testfile} +# This test won't work properly if system debuginfo is installed. +gdb_test_no_output "set debug-file-directory" + runto "break_me" # Switch to task 2, and verify that GDB is able to unwind all the way diff --git a/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.S b/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.S new file mode 100644 index 00000000000..eae94b06d88 --- /dev/null +++ b/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.S @@ -0,0 +1,76 @@ +/* Copyright 2012 Free Software Foundation, Inc. + + This file is part of GDB. + + 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 . */ + +/* Testcase compiled by gcc -m32 -S -fasynchronous-unwind-tables -O2: + +static int __attribute__ ((regparm (0), stdcall, noinline, noclone)) +f (int x) +{ + return x; +} +static int __attribute__ ((noinline, noclone)) +g (void) +{ + return f (1) + 1; +} +int +main (void) +{ + return g () + 1; +} + + */ + + .text + .type f, @function +f: +.LFB0: + .cfi_startproc + movl 4(%esp), %eax + ret $4 + .cfi_endproc +.LFE0: + .size f, .-f + .type g, @function +g: +.LFB1: + .cfi_startproc + subl $4, %esp + .cfi_def_cfa_offset 8 + movl $1, (%esp) + call f + .cfi_def_cfa_offset 4 + subl $4, %esp + .cfi_def_cfa_offset 8 + addl $1, %eax + addl $4, %esp + .cfi_def_cfa_offset 4 + ret + .cfi_endproc +.LFE1: + .size g, .-g + .globl main + .type main, @function +main: +.LFB2: + .cfi_startproc + call g + addl $1, %eax + ret + .cfi_endproc +.LFE2: + .size main, .-main diff --git a/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.exp b/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.exp new file mode 100644 index 00000000000..cf41c572789 --- /dev/null +++ b/gdb/testsuite/gdb.arch/i386-cfi-notcurrent.exp @@ -0,0 +1,34 @@ +# Copyright 2012 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 . + +# [RFA] DWARF frame unwinder executes one too many rows +# http://sourceware.org/ml/gdb-patches/2012-07/msg00650.html + +if {(![istarget "x86_64-*-*"] && ![istarget "i?86-*-*"]) || ![is_ilp32_target] } { + return 0 +} + +set testfile "i386-cfi-notcurrent" +set srcfile ${testfile}.S + +if [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {nodebug}] { + return -1 +} + +if ![runto f] { + return -1 +} + +gdb_test "backtrace" "#0 \[^\r\n\]* f \[^\r\n\]*\r\n#1 \[^\r\n\]* g \[^\r\n\]*\r\n#2 \[^\r\n\]* main \[^\r\n\]*"