This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[RFA] Fix several problems with the gdb.arch/gdb1291.exp test
- From: Fred Fish <fnf at ninemoons dot com>
- To: gdb-patches at sources dot redhat dot com
- Cc: fnf at redhat dot com
- Date: Tue, 10 Feb 2004 18:07:37 -0700
- Subject: [RFA] Fix several problems with the gdb.arch/gdb1291.exp test
- Reply-to: fnf at redhat dot com
There are several problems with the current gdb1291 test:
(1) Compilation with -O2 is required to expose the originally reported
bug.
(2) A gcc bug (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14022)
interferes with properly testing for the reported bug. The original
test was apparently modified to use an ASM to avoid having part of it
optimized away when using -O2.
(3) The test case has DOS style line separators for no apparent good
reason.
(4) The test case doesn't verify that reducing the local variable size
to less than or equal to 256 bytes makes the problem go away. Not
strictly necessary, but useful to have confirmed to ensure that we are
getting accurate test results.
This patch fixes the above issues and also causes the failure to be
logged as:
KFAIL: gdb.arch/gdb1291.exp: backtrace with local variable larger than 256 bytes (PRMS: gdb/1291)
instead of just a regular FAIL.
-Fred
2004-02-10 Fred Fish <fnf@redhat.com>
* gdb.arch/gdb1291.c: Convert from DOS line separators to UNIX
separators. Allow compilation as two separate pieces from one
file. Eliminate problematic ASM.
* gdb.arch/gdb1291.exp: Compile test case as two separate objects.
Expand test to check case that should not fail. Enable
compilation with -O2 to expose bug. Test for correct result,
known incorrect result, other failures and timeouts.
Index: gdb.arch/gdb1291.c
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.arch/gdb1291.c,v
retrieving revision 1.2
diff -c -p -r1.2 gdb1291.c
*** gdb.arch/gdb1291.c 4 Feb 2004 14:41:20 -0000 1.2
--- gdb.arch/gdb1291.c 11 Feb 2004 00:50:23 -0000
***************
*** 1,45 ****
! /* Copyright 2003, 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.
!
! Please email any bugs, comments, and/or additions to this file to:
! bug-gdb@gnu.org
!
! This file is part of the gdb testsuite. */
!
! void sub (void);
!
! main()
! {
! sub();
! }
!
! asm(".text\n"
! " .align 5\n"
! "sub:\n"
! "_sub:\n"
! " mov.l r14,@-r15\n"
! " mov.w .STACK2,r3\n"
! " sub r3,r15\n"
! " mov r15,r14\n"
! " mov.w .STACK2,r7\n"
! " add r7,r14\n"
! " mov r14,r15\n"
! " mov.l @r15+,r14\n"
! " rts\n"
! " nop\n"
! " .align 1\n"
! ".STACK2:\n"
! " .short 260\n");
--- 1,46 ----
! /* Copyright 2003, 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.
!
! Please email any bugs, comments, and/or additions to this file to:
! bug-gdb@gnu.org
!
! This file is part of the gdb testsuite. */
!
!
! #ifdef PART1
!
! main ()
! {
! extern void sub1 (void);
! extern void sub2 (void);
!
! sub1 ();
! sub2 ();
! }
!
! #else /* PART2 */
!
! sub1 ()
! {
! int buf[64];
! }
!
! sub2 ()
! {
! int buf[65];
! }
!
! #endif
Index: gdb.arch/gdb1291.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.arch/gdb1291.exp,v
retrieving revision 1.1
diff -c -p -r1.1 gdb1291.exp
*** gdb.arch/gdb1291.exp 3 Nov 2003 17:42:52 -0000 1.1
--- gdb.arch/gdb1291.exp 11 Feb 2004 00:50:23 -0000
***************
*** 1,4 ****
! # Copyright 2003 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
--- 1,4 ----
! # Copyright 2003, 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
*************** if ![istarget "sh-*-*"] then {
*** 39,47 ****
set testfile "gdb1291"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
! if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}
gdb_exit
gdb_start
--- 39,55 ----
set testfile "gdb1291"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
!
! # Compile the testcase was two separate pieces to avoid optimizing away sub()
! if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}1.o" object {debug "additional_flags=-DPART1 -O2"}] != "" } then {
gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}
+ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}2.o" object {debug "additional_flags=-DPART2 -O2"}] != "" } then {
+ gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
+ }
+ if { [gdb_compile "${testfile}1.o ${testfile}2.o" "${binfile}" executable {debug}] != "" } then {
+ gdb_suppress_entire_file "Testcase link failed, so all tests in this file will automatically fail."
+ }
gdb_exit
gdb_start
*************** if ![runto_main] then {
*** 56,62 ****
gdb_suppress_tests
}
! gdb_test "b sub" "Breakpoint 2*" "set breakpoint"
! gdb_test "c" "Breakpoint 2*" "get to sub"
! gdb_test "bt" "#0\[ \t\]*$hex \\(\\) at sh-bt.*\r\n#1\[ \t\]*$hex in main.*" \
! "backtrace in gdb1291"
--- 64,103 ----
gdb_suppress_tests
}
! gdb_test "b sub1" "Breakpoint 2.*" "set breakpoint"
! gdb_test "c" "Breakpoint 2.* sub1 .*" "get to sub1"
!
! send_gdb "bt\n"
! gdb_expect {
! -re "#0.* sub1 .*\r\n#1\[ \t\]*$hex in main \\(\\).*\r\n$gdb_prompt $" {
! pass "backtrace with local variable less than or equal to 256 bytes"
! }
! -re "#0.* sub1 .*\r\n\#1\[ \t\]*$hex in __setup_argv_for_main .*\r\n\#2\[ \t\]*$hex in start_l .*\r\n$gdb_prompt $" {
! kfail "gdb/1291" "backtrace with local variable less than or equal to 256 bytes"
! }
! -re ".*$gdb_prompt $" {
! fail "backtrace with local variable less than or equal to 256 bytes"
! }
! timeout {
! fail "backtrace with local variable less than or equal to 256 bytes (timeout)"
! }
! }
!
! gdb_test "b sub2" "Breakpoint 3.*" "set breakpoint"
! gdb_test "c" "Breakpoint 3.* sub2 .*" "get to sub2"
!
! send_gdb "bt\n"
! gdb_expect {
! -re "#0.* sub2 .*\r\n#1\[ \t\]*$hex in main \\(\\).*\r\n$gdb_prompt $" {
! pass "backtrace with local variable larger than 256 bytes"
! }
! -re "#0.* sub2 .*\r\n\#1\[ \t\]*$hex in __setup_argv_for_main .*\r\n\#2\[ \t\]*$hex in start_l .*\r\n$gdb_prompt $" {
! kfail "gdb/1291" "backtrace with local variable larger than 256 bytes"
! }
! -re ".*$gdb_prompt $" {
! fail "backtrace with local variable larger than 256 bytes"
! }
! timeout {
! fail "backtrace with local variable larger than 256 bytes (timeout)"
! }
! }