From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3400 invoked by alias); 18 Mar 2009 04:20:49 -0000 Received: (qmail 3371 invoked by uid 22791); 18 Mar 2009 04:20:47 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 18 Mar 2009 04:20:36 +0000 Received: (qmail 7309 invoked from network); 18 Mar 2009 04:20:34 -0000 Received: from unknown (HELO orlando) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 18 Mar 2009 04:20:34 -0000 From: Pedro Alves To: gdb-patches@sourceware.org Subject: Re: [patch] Fix `return' of long/long-long results with no debuginfo Date: Wed, 18 Mar 2009 04:36:00 -0000 User-Agent: KMail/1.9.10 Cc: Jan Kratochvil , Eli Zaretskii , Joel Brobecker , tromey@redhat.com, mark.kettenis@xs4all.nl, drow@false.org References: <20090315092137.GA14577@host0.dyn.jankratochvil.net> In-Reply-To: <20090315092137.GA14577@host0.dyn.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200903180420.37390.pedro@codesourcery.com> 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/msg00362.txt.bz2 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 The issue is that it relies on parsing the output of printf, which doesn't work against remote targets that don't implement some kind of semi-hosting io, like gdbserver. ( as a side, but related note, tests that need to rely on inferior output, should be guarded with "if [target_info exists gdb,noinferiorio]" ) What do you think we rewrite test to not rely on printf at all, like below? This passes for me on native x86_64-linux, and against x86_64-linux gdbserver. -- Pedro Alves 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 | 22 ++------------- gdb/testsuite/gdb.base/return-nodebug.exp | 44 ++++++++++++++++++++---------- gdb/testsuite/gdb.base/return-nodebug1.c | 22 +++++++++++++++ 3 files changed, 56 insertions(+), 32 deletions(-) Index: src/gdb/testsuite/gdb.base/return-nodebug.c =================================================================== --- src.orig/gdb/testsuite/gdb.base/return-nodebug.c 2009-03-18 03:11:16.000000000 +0000 +++ src/gdb/testsuite/gdb.base/return-nodebug.c 2009-03-18 03:49:06.000000000 +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; Index: src/gdb/testsuite/gdb.base/return-nodebug.exp =================================================================== --- src.orig/gdb/testsuite/gdb.base/return-nodebug.exp 2009-03-18 02:58:19.000000000 +0000 +++ src/gdb/testsuite/gdb.base/return-nodebug.exp 2009-03-18 03:52:58.000000000 +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}-${typenospace}0.o" object [list debug $additional_flags]] != "" } { + continue + } + + # This one is compiled without debug info. + if { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}-${typenospace}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 } Index: src/gdb/testsuite/gdb.base/return-nodebug1.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ src/gdb/testsuite/gdb.base/return-nodebug1.c 2009-03-18 03:12:13.000000000 +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; +}