From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9127 invoked by alias); 18 Mar 2009 15:16:23 -0000 Received: (qmail 9115 invoked by uid 22791); 18 Mar 2009 15:16:21 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 18 Mar 2009 15:16:14 +0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n2IFDPCA008475; Wed, 18 Mar 2009 11:13:25 -0400 Received: from host0.dyn.jankratochvil.net (sebastian-int.corp.redhat.com [172.16.52.221]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n2IFDPJn031225; Wed, 18 Mar 2009 11:13:26 -0400 Received: from host0.dyn.jankratochvil.net (localhost [127.0.0.1]) by host0.dyn.jankratochvil.net (8.14.3/8.14.3) with ESMTP id n2IFDLjD020636; Wed, 18 Mar 2009 16:13:22 +0100 Received: (from jkratoch@localhost) by host0.dyn.jankratochvil.net (8.14.3/8.14.2/Submit) id n2IFDKUr020631; Wed, 18 Mar 2009 16:13:20 +0100 Date: Wed, 18 Mar 2009 15:39:00 -0000 From: Jan Kratochvil To: Pedro Alves Cc: gdb-patches@sourceware.org, Eli Zaretskii , Joel Brobecker , tromey@redhat.com, mark.kettenis@xs4all.nl, drow@false.org Subject: Re: [patch] Fix `return' of long/long-long results with no debuginfo Message-ID: <20090318151320.GA20236@host0.dyn.jankratochvil.net> References: <20090315092137.GA14577@host0.dyn.jankratochvil.net> <200903180420.37390.pedro@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200903180420.37390.pedro@codesourcery.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-03/txt/msg00380.txt.bz2 On Wed, 18 Mar 2009 05:20:37 +0100, Pedro Alves wrote: > Unfortunatelly, this test is failing against gdbserver: > > Running ../../../src/gdb/testsuite/gdb.base/return-nodebug.exp ... > FAIL: gdb.base/return-nodebug.exp: signed-char: full width of the returned result > FAIL: gdb.base/return-nodebug.exp: short: full width of the returned result > FAIL: gdb.base/return-nodebug.exp: int: full width of the returned result > FAIL: gdb.base/return-nodebug.exp: long: full width of the returned result > FAIL: gdb.base/return-nodebug.exp: long-long: full width of the returned result got now a link the gdbserver mode can be tested by: http://sourceware.org/gdb/wiki/Native_gdbserver_testing > ( as a side, but related note, tests that need to rely on inferior output, > should be guarded with "if [target_info exists gdb,noinferiorio]" ) Thanks for the info. > What do you think we rewrite test to not rely on printf at all, like below? Yes, the fix looks fine to me. Just fixed the gdb_compile lines as it did not compile on a clean sourcetree. Thanks, Jan 2009-03-18 Pedro Alves * return-nodebug.c: Don't include stdio.h. (init): Delete. (func): Delete definition and provide extern declaration. (t): New. (main): Don't call printf. Call func and store its result in t. * return-nodebug1.c: New. * return-nodebug.exp: Don't expect stdio output. Instead, print the global variable t. Drop printf formatters and cast types from foreach loop. Don't use prepare_for_testing. Compile return-nodebug.c and return-nodebug1.c in separate steps. Don't define FORMAT or CAST. --- gdb/testsuite/gdb.base/return-nodebug.c 15 Mar 2009 09:19:40 -0000 1.1 +++ gdb/testsuite/gdb.base/return-nodebug.c 18 Mar 2009 15:05:00 -0000 @@ -15,34 +15,20 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include - -static TYPE -init (void) -{ - return 0; -} - -static TYPE -func (void) -{ - return 31; -} +extern TYPE func (void); static void marker (void) { } +TYPE t; + int main (void) { - /* Preinitialize registers to 0 to avoid false PASS by leftover garbage. */ - init (); - - printf ("result=" FORMAT "\n", CAST func ()); + t = func (); - /* Cannot `next' with no debug info. */ marker (); return 0; --- gdb/testsuite/gdb.base/return-nodebug.exp 15 Mar 2009 09:19:40 -0000 1.1 +++ gdb/testsuite/gdb.base/return-nodebug.exp 18 Mar 2009 15:05:00 -0000 @@ -34,28 +34,44 @@ proc do_test {type} { "return from function with no debug info with a cast" \ "Make selected stack frame return now\\? \\(y or n\\) " "y" + gdb_test "advance marker" "marker \\(.*" \ + "advance to marker" + # And if it returned the full width of the result. - gdb_test "adv marker" "\r\nresult=-1\r\n.* in marker \\(.*" \ - "full width of the returned result" + gdb_test "print /d t" " = -1" } set pf_prefix $old_prefix } -foreach case {{{signed char} %d (int)} \ - {{short} %d (int)} \ - {{int} %d} \ - {{long} %ld} \ - {{long long} %lld}} { - set type [lindex $case 0] - set format [lindex $case 1] - set cast [lindex $case 2] - +foreach type {{signed char} {short} {int} {long} {long long}} { set typeesc [string map {{ } {\ }} $type] set typenospace [string map {{ } -} $type] - if {[prepare_for_testing return-nodebug.exp "return-nodebug-$typenospace" "return-nodebug.c" \ - [list "additional_flags=-DFORMAT=\"$format\" -DTYPE=$typeesc -DCAST=$cast"]] == 0} { - do_test $type + set testfile "return-nodebug" + set srcfile ${testfile}.c + set srcfile1 ${testfile}1.c + set binfile ${objdir}/${subdir}/${testfile}-${typenospace} + + set additional_flags "additional_flags=-DTYPE=$typeesc" + + if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}0.o" object [list debug $additional_flags]] != "" } { + continue + } + + # This one is compiled without debug info. + if { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}1.o" object [list $additional_flags]] != "" } { + continue + } + + if { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug}] != "" } { + continue } + + gdb_exit + gdb_start + gdb_reinitialize_dir $srcdir/$subdir + gdb_load ${binfile} + + do_test $type } --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb/testsuite/gdb.base/return-nodebug1.c 18 Mar 2009 15:05:00 -0000 @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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 . */ + +TYPE +func (void) +{ + return 31; +}