From 96cc0ae8e0013ab85245c7fdf82f500d6578be91 Mon Sep 17 00:00:00 2001 From: Jerome Guitton Date: Mon, 8 Sep 2008 15:54:29 +0000 Subject: [PATCH] * gdb.base/stack-checking.c: New file. * gdb.base/stack-checking.exp: New file. --- gdb/testsuite/ChangeLog | 5 +++ gdb/testsuite/gdb.base/stack-checking.c | 49 +++++++++++++++++++++ gdb/testsuite/gdb.base/stack-checking.exp | 53 +++++++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 gdb/testsuite/gdb.base/stack-checking.c create mode 100644 gdb/testsuite/gdb.base/stack-checking.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 3fd991be0cb..d28f7255f0b 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-09-08 Jerome Guitton + + * gdb.base/stack-checking.c: New file. + * gdb.base/stack-checking.exp: New file. + 2008-09-05 Thiago Jung Bauermann * gdb.arch/altivec-abi.exp: Remove extra verbose call. diff --git a/gdb/testsuite/gdb.base/stack-checking.c b/gdb/testsuite/gdb.base/stack-checking.c new file mode 100644 index 00000000000..027d30ba274 --- /dev/null +++ b/gdb/testsuite/gdb.base/stack-checking.c @@ -0,0 +1,49 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2008 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 . */ + +/* + Test file to be compiled with -fstack-check, for testing "bt" against + different stack checking prologue sequences. + */ + +int i = 0; + +void +small_frame () +{ + i++; /* set breakpoint here */ +} + +void medium_frame () +{ + char S [16384]; + small_frame (); +} + +void big_frame () +{ + char S [524188]; + small_frame (); +} + +void +main () +{ + small_frame (); + medium_frame (); + big_frame (); +} diff --git a/gdb/testsuite/gdb.base/stack-checking.exp b/gdb/testsuite/gdb.base/stack-checking.exp new file mode 100644 index 00000000000..74c0c0cd841 --- /dev/null +++ b/gdb/testsuite/gdb.base/stack-checking.exp @@ -0,0 +1,53 @@ +# Copyright 2008 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 $tracelevel then { + strace $tracelevel +} + +set prms_id 0 +set bug_id 0 + +set testfile "stack-checking" +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [concat debug additional_flags=-fstack-check nowarnings]] != "" } { + untested stack-checking.exp + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + + +# Test that the debugger is able to unwind to "main" at the next breakpoint +# hit. The frame number of "main" should be passed into MAIN_FRAME_NUMBER." +proc backtrace_test {name main_frame_number} { + gdb_continue_to_breakpoint "breakpoint for $name" + gdb_test "bt" "#${main_frame_number}.*in main ().*" +} + +gdb_breakpoint [gdb_get_line_number "set breakpoint here"] +backtrace_test "small frame" "1" +backtrace_test "medium frame" "2" +backtrace_test "big frame" "2" -- 2.30.2