* [RFA] Fix several problems with the gdb.arch/gdb1291.exp test
@ 2004-02-11 1:07 Fred Fish
2004-02-11 1:17 ` Daniel Jacobowitz
0 siblings, 1 reply; 5+ messages in thread
From: Fred Fish @ 2004-02-11 1:07 UTC (permalink / raw)
To: gdb-patches; +Cc: fnf
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)"
! }
! }
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFA] Fix several problems with the gdb.arch/gdb1291.exp test
2004-02-11 1:07 [RFA] Fix several problems with the gdb.arch/gdb1291.exp test Fred Fish
@ 2004-02-11 1:17 ` Daniel Jacobowitz
2004-02-11 1:28 ` Fred Fish
0 siblings, 1 reply; 5+ messages in thread
From: Daniel Jacobowitz @ 2004-02-11 1:17 UTC (permalink / raw)
To: fnf; +Cc: gdb-patches
On Tue, Feb 10, 2004 at 06:07:37PM -0700, Fred Fish wrote:
> 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
Sorry, not OK. There are at least three problems:
- You have changed what is being tested. You are now testing the
dwarf2 unwinder, not the prologue unwinder.
- You are compiling an empty function with -O2 and expecting the
result to have some meaning. GCC will someday, hopefully soon,
remove the unused stack allocation. Then we won't be testing
anything at all.
- You've added a kfail pattern for PR 1291 that doesn't match the
description in the PR; the less than 256 bytes case shouldn't
be a kfail.
I recommend writing the whole test in assembly instead; this is
gdb.arch, after all. We don't want to be sensitive to GCC bugs.
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFA] Fix several problems with the gdb.arch/gdb1291.exp test
2004-02-11 1:17 ` Daniel Jacobowitz
@ 2004-02-11 1:28 ` Fred Fish
2004-02-11 2:11 ` Fred Fish
2004-02-12 1:11 ` Fred Fish
0 siblings, 2 replies; 5+ messages in thread
From: Fred Fish @ 2004-02-11 1:28 UTC (permalink / raw)
To: Daniel Jacobowitz, fnf; +Cc: gdb-patches
On Tuesday 10 February 2004 18:17, Daniel Jacobowitz wrote:
> Sorry, not OK. There are at least three problems:
All excellent points, as usual. Good example of why it's important to
have reviews of all patches. :-)
> - You've added a kfail pattern for PR 1291 that doesn't match the
> description in the PR; the less than 256 bytes case shouldn't
> be a kfail.
Another oops. That piece of the cloned test wasn't meant to be included.
> I recommend writing the whole test in assembly instead; this is
> gdb.arch, after all. We don't want to be sensitive to GCC bugs.
That sounds like the best solution.
Back to the drawing board...
-Fred
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFA] Fix several problems with the gdb.arch/gdb1291.exp test
2004-02-11 1:28 ` Fred Fish
@ 2004-02-11 2:11 ` Fred Fish
2004-02-12 1:11 ` Fred Fish
1 sibling, 0 replies; 5+ messages in thread
From: Fred Fish @ 2004-02-11 2:11 UTC (permalink / raw)
To: fnf, Daniel Jacobowitz; +Cc: gdb-patches
On Tuesday 10 February 2004 18:28, Fred Fish wrote:
> > I recommend writing the whole test in assembly instead; this is
> > gdb.arch, after all. We don't want to be sensitive to GCC bugs.
>
> That sounds like the best solution.
Wow, that opened a real can of worms!
Looks like I'm going to have to fix at least two major bugs (setting a
breakpoint at a reasonable place in main and stopping at the functions
called from main) before I can even think about testing the original
problem. :-(
This is in assembly code with no debug info provided.
-Fred
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFA] Fix several problems with the gdb.arch/gdb1291.exp test
2004-02-11 1:28 ` Fred Fish
2004-02-11 2:11 ` Fred Fish
@ 2004-02-12 1:11 ` Fred Fish
1 sibling, 0 replies; 5+ messages in thread
From: Fred Fish @ 2004-02-12 1:11 UTC (permalink / raw)
To: fnf, Daniel Jacobowitz; +Cc: gdb-patches
On Tuesday 10 February 2004 18:28, Fred Fish wrote:
> > I recommend writing the whole test in assembly instead; this is
> > gdb.arch, after all. We don't want to be sensitive to GCC bugs.
>
> That sounds like the best solution.
>
> Back to the drawing board...
OK, here is an updated patch. With the current gdb sources this
produces the log message:
KFAIL: gdb.arch/gdb1291.exp: backtrace with local variable larger than 256 bytes (PRMS: gdb/1291)
-Fred
2004-02-11 Fred Fish <fnf@redhat.com>
* gdb.arch/gdb1291.c: Remove
* gdb.arch/gdb1291.s: New test input file.
* gdb.arch/gdb1291.exp: Expand test to check case that should not
fail. Test for correct result, known incorrect result, other
failures and timeouts.
Index: gdb/testsuite/gdb.arch/gdb1291.c
===================================================================
RCS file: gdb/testsuite/gdb.arch/gdb1291.c
diff -N gdb/testsuite/gdb.arch/gdb1291.c
*** gdb/testsuite/gdb.arch/gdb1291.c 4 Feb 2004 14:41:20 -0000 1.2
--- /dev/null 1 Jan 1970 00:00:00 -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");
--- 0 ----
Index: gdb/testsuite/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/testsuite/gdb.arch/gdb1291.exp 3 Nov 2003 17:42:52 -0000 1.1
--- gdb/testsuite/gdb.arch/gdb1291.exp 12 Feb 2004 00:21:11 -0000
*************** if ![istarget "sh-*-*"] then {
*** 37,45 ****
}
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."
}
--- 37,45 ----
}
set testfile "gdb1291"
! set srcfile ${testfile}.s
set binfile ${objdir}/${subdir}/${testfile}
! if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable ""] != "" } {
gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}
*************** 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"
--- 56,92 ----
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 ".*$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 0x00000000 in \\?\\? \\(\\).*\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: gdb/testsuite/gdb.arch/gdb1291.s
===================================================================
RCS file: gdb/testsuite/gdb.arch/gdb1291.s
diff -N gdb/testsuite/gdb.arch/gdb1291.s
*** /dev/null 1 Jan 1970 00:00:00 -0000
--- gdb/testsuite/gdb.arch/gdb1291.s 12 Feb 2004 00:21:11 -0000
***************
*** 0 ****
--- 1,129 ----
+ ! 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
+ ! 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.
+ !
+ ! It was generated using "sh-elf-gcc -S gdb1291.c", using the following
+ ! source file:
+ !
+ ! #include <stdio.h>
+ !
+ ! main()
+ ! {
+ ! printf("hello world\n");
+ ! sub1();
+ ! sub2();
+ ! }
+ ! sub1()
+ ! {
+ ! int buf[64];
+ !
+ ! }
+ !
+ ! sub2()
+ ! {
+ ! int buf[65];
+ !
+ ! }
+ !
+ ! We use a pregenerated assembly file as the test input to avoid possible
+ ! problems with future versions of gcc generating different code.
+
+ .file "gdb1291.c"
+ .text
+ .section .rodata
+ .align 2
+ .LC0:
+ .string "hello world\n"
+ .text
+ .align 1
+ .global _main
+ .type _main, @function
+ _main:
+ mov.l r14,@-r15
+ sts.l pr,@-r15
+ mov r15,r14
+ mov.l .L2,r1
+ mov r1,r4
+ mov.l .L3,r1
+ jsr @r1
+ nop
+ mov.l .L4,r1
+ jsr @r1
+ nop
+ mov.l .L5,r1
+ jsr @r1
+ nop
+ mov r14,r15
+ lds.l @r15+,pr
+ mov.l @r15+,r14
+ rts
+ nop
+ .L6:
+ .align 2
+ .L2:
+ .long .LC0
+ .L3:
+ .long _printf
+ .L4:
+ .long _sub1
+ .L5:
+ .long _sub2
+ .size _main, .-_main
+ .align 1
+ .global _sub1
+ .type _sub1, @function
+ _sub1:
+ mov.l r14,@-r15
+ sts.l pr,@-r15
+ add #-128,r15
+ add #-128,r15
+ mov r15,r14
+ mov.w .L8,r7
+ add r7,r14
+ mov r14,r15
+ lds.l @r15+,pr
+ mov.l @r15+,r14
+ rts
+ nop
+ .align 1
+ .L8:
+ .short 256
+ .size _sub1, .-_sub1
+ .align 1
+ .global _sub2
+ .type _sub2, @function
+ _sub2:
+ mov.l r14,@-r15
+ sts.l pr,@-r15
+ mov.w .L11,r1
+ sub r1,r15
+ mov r15,r14
+ mov.w .L11,r7
+ add r7,r14
+ mov r14,r15
+ lds.l @r15+,pr
+ mov.l @r15+,r14
+ rts
+ nop
+ .align 1
+ .L11:
+ .short 260
+ .size _sub2, .-_sub2
+ .ident "GCC: (GNU) 3.5.0 20040204 (experimental)"
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2004-02-12 1:11 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-02-11 1:07 [RFA] Fix several problems with the gdb.arch/gdb1291.exp test Fred Fish
2004-02-11 1:17 ` Daniel Jacobowitz
2004-02-11 1:28 ` Fred Fish
2004-02-11 2:11 ` Fred Fish
2004-02-12 1:11 ` Fred Fish
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox