Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <pedro@codesourcery.com>
To: gdb-patches@sourceware.org
Cc: Jan Kratochvil <jan.kratochvil@redhat.com>,
	 Eli Zaretskii <eliz@gnu.org>,
	 Joel Brobecker <brobecker@adacore.com>,
	 tromey@redhat.com,  mark.kettenis@xs4all.nl,  drow@false.org
Subject: Re: [patch] Fix `return' of long/long-long results with no debuginfo
Date: Wed, 18 Mar 2009 04:36:00 -0000	[thread overview]
Message-ID: <200903180420.37390.pedro@codesourcery.com> (raw)
In-Reply-To: <20090315092137.GA14577@host0.dyn.jankratochvil.net>

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  <pedro@codesourcery.com>

	* 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 <http://www.gnu.org/licenses/>.  */
 
-#include <stdio.h>
-
-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 <http://www.gnu.org/licenses/>.  */
+
+TYPE
+func (void)
+{
+  return 31;
+}


  reply	other threads:[~2009-03-18  4:20 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-11 19:45 Jan Kratochvil
2009-02-11 20:40 ` Mark Kettenis
2009-02-11 20:50   ` Daniel Jacobowitz
2009-02-11 21:23     ` Mark Kettenis
2009-02-11 21:47       ` Jan Kratochvil
2009-02-11 21:58         ` Mark Kettenis
2009-02-11 22:08           ` Jan Kratochvil
2009-02-11 22:38             ` Mark Kettenis
2009-02-11 22:50               ` Jan Kratochvil
2009-03-03 18:10                 ` Tom Tromey
2009-03-04 21:29                   ` Mark Kettenis
2009-03-05  0:15                     ` Tom Tromey
2009-03-09  1:55                       ` Jan Kratochvil
2009-03-09 22:38                         ` Mark Kettenis
2009-03-11 16:49                           ` Joel Brobecker
2009-03-11 20:23                             ` Tom Tromey
2009-03-11 21:48                               ` Joel Brobecker
2009-03-13 19:50                                 ` Jan Kratochvil
2009-03-13 23:00                                   ` Joel Brobecker
2009-03-14 10:45                                   ` Eli Zaretskii
2009-03-14 22:09                                     ` Jan Kratochvil
2009-03-14 22:18                                       ` Eli Zaretskii
2009-03-15  9:22                                       ` Joel Brobecker
2009-03-15 18:15                                         ` Jan Kratochvil
2009-03-18  4:36                                           ` Pedro Alves [this message]
2009-03-18 14:44                                             ` Joel Brobecker
2009-03-18 15:39                                             ` Jan Kratochvil
2009-03-18 15:46                                               ` Pedro Alves
2009-02-11 22:44         ` Mark Kettenis
2009-02-12  9:41           ` Jan Kratochvil
2009-02-12 14:36             ` Pierre Muller
2009-02-12 14:44               ` Jan Kratochvil
2009-02-14 21:59             ` Mark Kettenis
2009-02-21 12:47           ` Jan Kratochvil
2009-02-21 13:44             ` Mark Kettenis
2009-02-21 15:58   ` Jan Kratochvil
2009-02-21 16:21     ` Mark Kettenis
2009-02-21 16:32       ` Jan Kratochvil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200903180420.37390.pedro@codesourcery.com \
    --to=pedro@codesourcery.com \
    --cc=brobecker@adacore.com \
    --cc=drow@false.org \
    --cc=eliz@gnu.org \
    --cc=gdb-patches@sourceware.org \
    --cc=jan.kratochvil@redhat.com \
    --cc=mark.kettenis@xs4all.nl \
    --cc=tromey@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox