testsuite/boards/stabs.exp

Message ID m3d27ni060.fsf@seba.sebabeach.org
State New, archived
Headers

Commit Message

Doug Evans Dec. 13, 2014, 11:45 p.m. UTC
  Hi.

The easiest way for me to remember how to run the testsuite in a certain
configuration is if there is a board file for it.

Thus ...

2014-12-13  Doug Evans  <xdje42@gmail.com>

	* boards/stabs.exp: New file.
  

Comments

Yao Qi Dec. 14, 2014, 6:34 a.m. UTC | #1
Doug Evans <xdje42@gmail.com> writes:

> The easiest way for me to remember how to run the testsuite in a certain
> configuration is if there is a board file for it.

Alternatively, we can referencehttps://sourceware.org/gdb/wiki/TestingGDB ,
passing CFLAGS_FOR_TARGET='-gstabs' to dejagnu is convenient too, so I
don't see the necessity to add a new board file to do that.
  
Doug Evans Dec. 14, 2014, 7:05 a.m. UTC | #2
On Sat, Dec 13, 2014 at 10:34 PM, Yao Qi <yao@codesourcery.com> wrote:
> Doug Evans <xdje42@gmail.com> writes:
>
>> The easiest way for me to remember how to run the testsuite in a certain
>> configuration is if there is a board file for it.
>
> Alternatively, we can referencehttps://sourceware.org/gdb/wiki/TestingGDB ,
> passing CFLAGS_FOR_TARGET='-gstabs' to dejagnu is convenient too, so I
> don't see the necessity to add a new board file to do that.

Not as convenient.
And CFLAGS_FOR_TARGET  is actually not the same.
[May seem weird at first, but if you dig into it, it's not that weird.]

a) I can ls testsuite/boards trivially.
b) The testsuite gets the -g* variant to use from the debug_flags board config.
If you specify CFLAGS_FOR_TARGET then that value *and* the
debug_flags board config are passed to gcc.
Plus, -g -gstabs != -gstabs -g.
[I didn't dig into why, easy enough if it becomes important.]
The high order bit is that the right way to specify the flag
to control the debug format is with the debug_flags board config.

The difference can be seen by trying both.
A simple example to play with is gdb.cp/bool.exp.

check-gdb --target_board=stabs bool.exp
-> 2 fails
FAIL: gdb.cp/bool.exp: print return_true()
FAIL: gdb.cp/bool.exp: print return_false()

check-gdb CFLAGS_FOR_TARGET=-gstabs bool.exp
-> 2 passes

Is there something about adding a board file that causes problems I'm
not aware of?
If so, we'd better establish what it is and get it written down.
I can imagine wanting more board files.  :-)
  
Joel Brobecker Dec. 14, 2014, 1:20 p.m. UTC | #3
> Alternatively, we can referencehttps://sourceware.org/gdb/wiki/TestingGDB ,
> passing CFLAGS_FOR_TARGET='-gstabs' to dejagnu is convenient too, so I
> don't see the necessity to add a new board file to do that.

Another idea I thought about yesterday was to write a small python
script that takes arguments on the command line and then calls make
the right way for us, potentially even generating board files if
necessary. The interesting bit in the script is the ability to call
it with --help...
  
Joel Brobecker Dec. 14, 2014, 1:21 p.m. UTC | #4
> Is there something about adding a board file that causes problems I'm
> not aware of?
> If so, we'd better establish what it is and get it written down.
> I can imagine wanting more board files.  :-)

FWIW, add away!
  
Doug Evans Dec. 14, 2014, 5:23 p.m. UTC | #5
On Sun, Dec 14, 2014 at 5:20 AM, Joel Brobecker <brobecker@adacore.com> wrote:
>> Alternatively, we can referencehttps://sourceware.org/gdb/wiki/TestingGDB ,
>> passing CFLAGS_FOR_TARGET='-gstabs' to dejagnu is convenient too, so I
>> don't see the necessity to add a new board file to do that.
>
> Another idea I thought about yesterday was to write a small python
> script that takes arguments on the command line and then calls make
> the right way for us, potentially even generating board files if
> necessary. The interesting bit in the script is the ability to call
> it with --help...

One nice thing about a board file for a specific purpose is that it's a place
to document issues related to that purpose.
And even add complexities related to that purpose.

Given that -g -gstabs != -gstabs -g,
I think we want to document that.

And also given that -gstabs != -gstabs -g,
we *may* (though I don't have as strong an opinion
on this as we're trying to kill^wstab stabs :-))
want a way to run stabs both ways.
E.g., bool.exp passes one way, and fails the other.

The stabs board file could be the repository
for "all things stabs".
  
Yao Qi Dec. 15, 2014, 3:22 a.m. UTC | #6
Doug Evans <xdje42@gmail.com> writes:

> b) The testsuite gets the -g* variant to use from the debug_flags board config.
> If you specify CFLAGS_FOR_TARGET then that value *and* the
> debug_flags board config are passed to gcc.
> Plus, -g -gstabs != -gstabs -g.
> [I didn't dig into why, easy enough if it becomes important.]

Oh, it is surprise to me.

> The high order bit is that the right way to specify the flag
> to control the debug format is with the debug_flags board config.
>
> The difference can be seen by trying both.
> A simple example to play with is gdb.cp/bool.exp.
>
> check-gdb --target_board=stabs bool.exp
> -> 2 fails
> FAIL: gdb.cp/bool.exp: print return_true()
> FAIL: gdb.cp/bool.exp: print return_false()
>
> check-gdb CFLAGS_FOR_TARGET=-gstabs bool.exp
> -> 2 passes

Thanks for giving this example.

>
> Is there something about adding a board file that causes problems I'm
> not aware of?
> If so, we'd better establish what it is and get it written down.
> I can imagine wanting more board files.  :-)

Adding board file stabs.exp is fine to me.
  
Pedro Alves Dec. 15, 2014, 11:11 a.m. UTC | #7
On 12/14/2014 07:05 AM, Doug Evans wrote:
> On Sat, Dec 13, 2014 at 10:34 PM, Yao Qi <yao@codesourcery.com> wrote:
>> Doug Evans <xdje42@gmail.com> writes:

> b) The testsuite gets the -g* variant to use from the debug_flags board config.
> If you specify CFLAGS_FOR_TARGET then that value *and* the
> debug_flags board config are passed to gcc.
> Plus, -g -gstabs != -gstabs -g.
> [I didn't dig into why, easy enough if it becomes important.]
> The high order bit is that the right way to specify the flag
> to control the debug format is with the debug_flags board config.
> 
> The difference can be seen by trying both.
> A simple example to play with is gdb.cp/bool.exp.
> 
> check-gdb --target_board=stabs bool.exp
> -> 2 fails
> FAIL: gdb.cp/bool.exp: print return_true()
> FAIL: gdb.cp/bool.exp: print return_false()
> 
> check-gdb CFLAGS_FOR_TARGET=-gstabs bool.exp
> -> 2 passes

No objections to a board file if it makes things easy, but
did you consider allowing passing a variable from the command line,
to override debug_flags, so we could do things like:

 $ make check DEBUG_FLAGS="-gstabs" bool.exp

 $ make check DEBUG_FLAGS="-gstabs" RUNTESTFLAGS="--host_board=foo --target_board=bar" bool.exp

?

Thanks,
Pedro Alves
  

Patch

diff --git a/gdb/testsuite/boards/stabs.exp b/gdb/testsuite/boards/stabs.exp
new file mode 100644
index 0000000..cf7ea7a
--- /dev/null
+++ b/gdb/testsuite/boards/stabs.exp
@@ -0,0 +1,33 @@ 
+# Copyright 2014 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/>.
+
+# This file is a dejagnu "board file" and is used to run the testsuite
+# with stabs support.
+#
+# Example usage:
+# bash$ make check RUNTESTFLAGS='--target_board=stabs'
+
+# This is copied from baseboards/unix.exp.
+# At the moment this only supports things that unix.exp supports.
+load_generic_config "unix"
+process_multilib_options ""
+set_board_info compiler "[find_gcc]"
+
+set_board_info debug_flags "-gstabs"
+
+# This is needed otherwise dejagnu tries to rsh to host "fission".  Blech.
+# Double blech: set_board_info only sets the value if not already set.
+unset_board_info isremote
+set_board_info isremote 0