This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFA] Fix several problems with the gdb.arch/gdb1291.exp test


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)"
!     }
! }



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]