diff mbox

Weird behaviour with --target_board="unix{var1,var2}"

Message ID 20160824110921.GM20016@redhat.com
State New
Headers show

Commit Message

Jonathan Wakely Aug. 24, 2016, 11:09 a.m. UTC
On 23/08/16 12:05 +0100, Pedro Alves wrote:
>On 08/23/2016 10:54 AM, Jonathan Wakely wrote:
>
>>> That's being set by prettyprinters.exp and xmethods.exp (so it's GDB's
>>> fault! ;-)
>
>:-)
>
>> This seems to work. I'll do some more testing and commit later today.
>
>LGTM.
>
>Though IME, save/restoring globals in a constant source of trouble,
>for occasionally someone adds an early return that inadvertently
>skips the restore.  Of course in gdb every test must be written
>using custom .exp code, so we're more prone to being bitten.  Still...
>
>The way we solve that on gdb systematically is with convenience
>wrappers that handle the save/restore.  E.g. see:
>
> $ grep "proc with_" *
> gdb.exp:proc with_test_prefix { prefix body } {
> gdb.exp:proc with_gdb_prompt { prompt body } {
> gdb.exp:proc with_target_charset { target_charset body } {
> gdb.exp:proc with_spawn_id { spawn_id body } {
> gdb.exp:proc with_timeout_factor { factor body } {
>
>In this particular case, I'd add a wrapper method to
>libstdc++-v3/testsuite/lib/gdb-test.exp, such as:
>
># Like dg-runtest but keep the .exe around.  dg-test has an option for
># this but there is no way to pass it through dg-runtest.
>
>proc gdb-dg-runtest {args} {
>  global dg-interpreter-batch-mode
>  set saved-dg-interpreter-batch-mode ${dg-interpreter-batch-mode}
>  set dg-interpreter-batch-mode 1
>
>  eval dg-runtest $args
>
>  set dg-interpreter-batch-mode ${saved-dg-interpreter-batch-mode}
>}
>
>And then use gdb-dg-runtest instead of dg-runtest in
>prettyprinters.exp and xmethods.exp.

That works nicely.

>(Maybe put even move more of the duplicate code around the
>current dg-runtest calls to the wrapper, and then give the
>wrapper named arguments.)

That didn't seem to make things simpler.

This is what I plan to commit.
diff mbox

Patch

commit a487dae3a870d0c238bef06937d63d0136a13465
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Tue Aug 23 09:09:18 2016 +0100

    Restore dg-interpreter-batch-mode for libstdc++ tests
    
    2016-08-24  Jonathan Wakely  <jwakely@redhat.com>
    	    Pedro Alves  <palves@redhat.com>
    
    	* testsuite/lib/gdb-test.exp (gdb-dg-runtest): Define wrapper to save
    	and restore dg-interpreter-batch-mode.
    	* testsuite/libstdc++-prettyprinters/prettyprinters.exp: Use
    	gdb-dg-runtest instead of dg-runtest.
    	* testsuite/libstdc++-xmethods/xmethods.exp: Likewise.

diff --git a/libstdc++-v3/testsuite/lib/gdb-test.exp b/libstdc++-v3/testsuite/lib/gdb-test.exp
index 5570009..a029883 100644
--- a/libstdc++-v3/testsuite/lib/gdb-test.exp
+++ b/libstdc++-v3/testsuite/lib/gdb-test.exp
@@ -277,3 +277,15 @@  proc gdb_version_check_xmethods {} {
 	      "python import gdb.xmethod; print(gdb.xmethod.XMethod)" \
 	      "<class 'gdb\\.xmethod\\.XMethod'>"]
 }
+
+# Like dg-runtest but keep the .exe around.  dg-test has an option for
+# this but there is no way to pass it through dg-runtest.
+proc gdb-dg-runtest {args} {
+  global dg-interpreter-batch-mode
+  set saved-dg-interpreter-batch-mode ${dg-interpreter-batch-mode}
+  set dg-interpreter-batch-mode 1
+
+  eval dg-runtest $args
+
+  set dg-interpreter-batch-mode ${saved-dg-interpreter-batch-mode}
+}
diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp b/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp
index 0c62b5e..cc003cd 100644
--- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp
+++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp
@@ -41,14 +41,9 @@  if {! [gdb_version_check]} {
     return
 }
 
-# This can be used to keep the .exe around.  dg-test has an option for
-# this but there is no way to pass it through dg-runtest.
-global dg-interpreter-batch-mode
-set dg-interpreter-batch-mode 1
-
 global DEFAULT_CXXFLAGS
 global PCH_CXXFLAGS
-dg-runtest [lsort [glob $srcdir/$subdir/*.cc]] \
+gdb-dg-runtest [lsort [glob $srcdir/$subdir/*.cc]] \
   "" "$DEFAULT_CXXFLAGS $PCH_CXXFLAGS"
 
 if [info exists guality_gdb_name] {
diff --git a/libstdc++-v3/testsuite/libstdc++-xmethods/xmethods.exp b/libstdc++-v3/testsuite/libstdc++-xmethods/xmethods.exp
index ee9b31a..e580d73 100644
--- a/libstdc++-v3/testsuite/libstdc++-xmethods/xmethods.exp
+++ b/libstdc++-v3/testsuite/libstdc++-xmethods/xmethods.exp
@@ -42,14 +42,9 @@  if {! [gdb_version_check_xmethods]} {
     return
 }
 
-# This can be used to keep the .exe around.  dg-test has an option for
-# this but there is no way to pass it through dg-runtest.
-global dg-interpreter-batch-mode
-set dg-interpreter-batch-mode 1
-
 global DEFAULT_CXXFLAGS
 global PCH_CXXFLAGS
-dg-runtest [lsort [glob $srcdir/$subdir/*.cc]] \
+gdb-dg-runtest [lsort [glob $srcdir/$subdir/*.cc]] \
   "" "$DEFAULT_CXXFLAGS $PCH_CXXFLAGS"
 
 if [info exists guality_gdb_name] {