public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* Fix some problems in gdb.compile
@ 2022-11-30 19:35 Tom Tromey
  2022-11-30 19:35 ` [PATCH 1/3] Remove one copy of skip_compile_feature_tests Tom Tromey
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Tom Tromey @ 2022-11-30 19:35 UTC (permalink / raw)
  To: gdb-patches

I was looking into some irritating timeouts in gdb.compile and came up
with this short series.  It doesn't fix any of the underlying issues,
but it at least makes the tests complete reasonably quickly.

Let me know what you think.

Tom



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] Remove one copy of skip_compile_feature_tests
  2022-11-30 19:35 Fix some problems in gdb.compile Tom Tromey
@ 2022-11-30 19:35 ` Tom Tromey
  2022-11-30 19:35 ` [PATCH 2/3] Remove obsolete check from skip_compile_feature_tests Tom Tromey
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Tom Tromey @ 2022-11-30 19:35 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

I noticed that there are two identical copies of
skip_compile_feature_tests in the test suite.  This removes one from
gdb.exp, in favor of the one in compile-support.exp.
---
 gdb/testsuite/gdb.base/options.exp           |  1 +
 gdb/testsuite/gdb.compile/compile-ifunc.exp  |  2 ++
 gdb/testsuite/gdb.compile/compile-ops.exp    |  1 +
 gdb/testsuite/gdb.compile/compile-print.exp  |  2 ++
 gdb/testsuite/gdb.compile/compile-setjmp.exp |  2 ++
 gdb/testsuite/gdb.compile/compile-tls.exp    |  2 ++
 gdb/testsuite/gdb.compile/compile.exp        |  2 ++
 gdb/testsuite/lib/gdb.exp                    | 20 --------------------
 8 files changed, 12 insertions(+), 20 deletions(-)

diff --git a/gdb/testsuite/gdb.base/options.exp b/gdb/testsuite/gdb.base/options.exp
index d10e7f8d66f..8fd968de1ad 100644
--- a/gdb/testsuite/gdb.base/options.exp
+++ b/gdb/testsuite/gdb.base/options.exp
@@ -31,6 +31,7 @@
 #  - thread apply
 #  - taas
 
+load_lib compile-support.exp
 load_lib completion-support.exp
 
 standard_testfile .c
diff --git a/gdb/testsuite/gdb.compile/compile-ifunc.exp b/gdb/testsuite/gdb.compile/compile-ifunc.exp
index 4f671c6453f..07de52c3f67 100644
--- a/gdb/testsuite/gdb.compile/compile-ifunc.exp
+++ b/gdb/testsuite/gdb.compile/compile-ifunc.exp
@@ -13,6 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+load_lib compile-support.exp
+
 if {[skip_ifunc_tests]} {
     return 0
 }
diff --git a/gdb/testsuite/gdb.compile/compile-ops.exp b/gdb/testsuite/gdb.compile/compile-ops.exp
index 76f284f52f3..cff2f946c93 100644
--- a/gdb/testsuite/gdb.compile/compile-ops.exp
+++ b/gdb/testsuite/gdb.compile/compile-ops.exp
@@ -16,6 +16,7 @@
 # Some coverage testing of DWARF operators for the compiler
 # integration.
 
+load_lib compile-support.exp
 load_lib dwarf.exp
 
 # This test can only be run on targets which support DWARF-2 and use gas.
diff --git a/gdb/testsuite/gdb.compile/compile-print.exp b/gdb/testsuite/gdb.compile/compile-print.exp
index 051cfabe3ea..5d01c1a53d0 100644
--- a/gdb/testsuite/gdb.compile/compile-print.exp
+++ b/gdb/testsuite/gdb.compile/compile-print.exp
@@ -13,6 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+load_lib compile-support.exp
+
 standard_testfile
 
 if { [prepare_for_testing "failed to prepare" "$testfile"] } {
diff --git a/gdb/testsuite/gdb.compile/compile-setjmp.exp b/gdb/testsuite/gdb.compile/compile-setjmp.exp
index 89a65fb0da1..c883b2bd570 100644
--- a/gdb/testsuite/gdb.compile/compile-setjmp.exp
+++ b/gdb/testsuite/gdb.compile/compile-setjmp.exp
@@ -13,6 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+load_lib compile-support.exp
+
 standard_testfile .c compile-setjmp-mod.c
 
 if { [prepare_for_testing "failed to prepare" $testfile] } {
diff --git a/gdb/testsuite/gdb.compile/compile-tls.exp b/gdb/testsuite/gdb.compile/compile-tls.exp
index f9c9ee5e2f7..beffe7fd5be 100644
--- a/gdb/testsuite/gdb.compile/compile-tls.exp
+++ b/gdb/testsuite/gdb.compile/compile-tls.exp
@@ -13,6 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+load_lib compile-support.exp
+
 standard_testfile .c
 
 if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
diff --git a/gdb/testsuite/gdb.compile/compile.exp b/gdb/testsuite/gdb.compile/compile.exp
index f2515586c39..c712070872a 100644
--- a/gdb/testsuite/gdb.compile/compile.exp
+++ b/gdb/testsuite/gdb.compile/compile.exp
@@ -13,6 +13,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+load_lib compile-support.exp
+
 standard_testfile .c compile-shlib.c compile-constvar.S compile-nodebug.c
 
 set options {}
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 23e3cc0c2d4..5067e240507 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -4195,26 +4195,6 @@ proc skip_libstdcxx_probe_tests {} {
     return [skip_libstdcxx_probe_tests_prompt "$gdb_prompt $"]
 }
 
-# Return 1 if we should skip tests of the "compile" feature.
-# This must be invoked after the inferior has been started.
-
-proc skip_compile_feature_tests {} {
-    global gdb_prompt
-
-    set result 0
-    gdb_test_multiple "compile code -- ;" "check for working compile command" {
-	"Could not load libcc1.*\r\n$gdb_prompt $" {
-	    set result 1
-	}
-	-re "Command not supported on this host\\..*\r\n$gdb_prompt $" {
-	    set result 1
-	}
-	-re "\r\n$gdb_prompt $" {
-	}
-    }
-    return $result
-}
-
 # Helper for gdb_is_target_* procs.  TARGET_NAME is the name of the target
 # we're looking for (used to build the test name).  TARGET_STACK_REGEXP
 # is a regexp that will match the output of "maint print target-stack" if
-- 
2.34.3


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 2/3] Remove obsolete check from skip_compile_feature_tests
  2022-11-30 19:35 Fix some problems in gdb.compile Tom Tromey
  2022-11-30 19:35 ` [PATCH 1/3] Remove one copy of skip_compile_feature_tests Tom Tromey
@ 2022-11-30 19:35 ` Tom Tromey
  2022-11-30 19:35 ` [PATCH 3/3] Avoid timeouts in gdb.compile Tom Tromey
  2022-12-01  0:17 ` Fix some problems " Kevin Buettner
  3 siblings, 0 replies; 5+ messages in thread
From: Tom Tromey @ 2022-11-30 19:35 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

skip_compile_feature_tests checks for "Command not supported on this
host", but this error was removed by commit e8d8cce6 ("Import mkdtemp
gnulib module, fix mingw build").  This patch removes the obsolete
test.
---
 gdb/testsuite/lib/compile-support.exp | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/gdb/testsuite/lib/compile-support.exp b/gdb/testsuite/lib/compile-support.exp
index 58b3e4e3a1e..16b7c5dbc0d 100644
--- a/gdb/testsuite/lib/compile-support.exp
+++ b/gdb/testsuite/lib/compile-support.exp
@@ -26,9 +26,6 @@ proc skip_compile_feature_tests {} {
 	"Could not load libcc1.*\r\n$gdb_prompt $" {
 	    set result 1
 	}
-	-re "Command not supported on this host\\..*\r\n$gdb_prompt $" {
-	    set result 1
-	}
 	-re "\r\n$gdb_prompt $" {
 	}
     }
-- 
2.34.3


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 3/3] Avoid timeouts in gdb.compile
  2022-11-30 19:35 Fix some problems in gdb.compile Tom Tromey
  2022-11-30 19:35 ` [PATCH 1/3] Remove one copy of skip_compile_feature_tests Tom Tromey
  2022-11-30 19:35 ` [PATCH 2/3] Remove obsolete check from skip_compile_feature_tests Tom Tromey
@ 2022-11-30 19:35 ` Tom Tromey
  2022-12-01  0:17 ` Fix some problems " Kevin Buettner
  3 siblings, 0 replies; 5+ messages in thread
From: Tom Tromey @ 2022-11-30 19:35 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

PR compile/29541 points out that some of the C++ tests in gdb.compile
will time out when the glibc debuginfo is installed.  This was
interfering with my hacking on gdb by making test runs extremely long,
so I looked into it.

Internally the bug seems to be that gdb tries to convert multiple
symbols named "var" via the compiler interface; one such symbol (I
didn't track it down too far) causes the C++ compiler plugin to crash.

Unfortunately, the crash is reported as a timeout, as the gdb side of
the plugin simply hangs.  This seems like a bug in the plugin RPC
mechanism and, worse, apparently when I wrote this stuff I didn't
really consider error reporting very much at all, so gdb can't really
detect failures in the first place.

Anyway... this patch works around the timeout by compiling a simple
test that should provoke this bug, and then using "untested" if it
notices a GCC crash.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29541
---
 .../gdb.compile/compile-cplus-anonymous.exp   | 10 ++--
 .../gdb.compile/compile-cplus-array-decay.exp |  4 +-
 .../gdb.compile/compile-cplus-inherit.exp     | 10 ++--
 .../gdb.compile/compile-cplus-member.exp      | 10 ++--
 .../gdb.compile/compile-cplus-method.exp      | 10 ++--
 .../gdb.compile/compile-cplus-namespace.exp   | 10 ++--
 .../gdb.compile/compile-cplus-nested.exp      | 10 ++--
 .../gdb.compile/compile-cplus-print.exp       |  3 +-
 .../gdb.compile/compile-cplus-virtual.exp     | 10 ++--
 gdb/testsuite/gdb.compile/compile-cplus.exp   |  9 ++--
 gdb/testsuite/gdb.compile/compile-ifunc.exp   |  3 +-
 gdb/testsuite/gdb.compile/compile-ops.exp     |  3 +-
 gdb/testsuite/gdb.compile/compile-print.exp   |  3 +-
 gdb/testsuite/gdb.compile/compile-setjmp.exp  |  3 +-
 gdb/testsuite/gdb.compile/compile-tls.exp     |  3 +-
 gdb/testsuite/gdb.compile/compile.exp         |  3 +-
 gdb/testsuite/lib/compile-support.exp         | 48 ++++++++++++++++---
 17 files changed, 82 insertions(+), 70 deletions(-)

diff --git a/gdb/testsuite/gdb.compile/compile-cplus-anonymous.exp b/gdb/testsuite/gdb.compile/compile-cplus-anonymous.exp
index 26a331a2ac8..c3ffeeb93fd 100644
--- a/gdb/testsuite/gdb.compile/compile-cplus-anonymous.exp
+++ b/gdb/testsuite/gdb.compile/compile-cplus-anonymous.exp
@@ -33,15 +33,13 @@ if {![runto_main]} {
     return -1
 }
 
-if {[skip_compile_feature_tests]} {
-    untested \
-	"compile command not supported (could not find libcc1 shared library?)"
-    return -1
-}
-
 gdb_breakpoint [gdb_get_line_number "break here" $srcfile]
 gdb_continue_to_breakpoint "testing location"
 
+if {[skip_compile_feature_untested "var = 0"]} {
+    return -1
+}
+
 # Reminder, "var" is an integer; all these types get converted to `int'.
 CompileExpression::new "var"
 CompileExpression::test "anon_e" {(3|GHI)}
diff --git a/gdb/testsuite/gdb.compile/compile-cplus-array-decay.exp b/gdb/testsuite/gdb.compile/compile-cplus-array-decay.exp
index 18062a31b9c..2892d2415be 100644
--- a/gdb/testsuite/gdb.compile/compile-cplus-array-decay.exp
+++ b/gdb/testsuite/gdb.compile/compile-cplus-array-decay.exp
@@ -33,9 +33,7 @@ if {![runto_main]} {
     return -1
 }
 
-if {[skip_compile_feature_tests]} {
-    untested \
-	"compile command not supported (could not find libcc1 shared library?)"
+if {[skip_compile_feature_untested]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.compile/compile-cplus-inherit.exp b/gdb/testsuite/gdb.compile/compile-cplus-inherit.exp
index 8f3d282cd49..536a5a45fc2 100644
--- a/gdb/testsuite/gdb.compile/compile-cplus-inherit.exp
+++ b/gdb/testsuite/gdb.compile/compile-cplus-inherit.exp
@@ -33,15 +33,13 @@ if {![runto_main]} {
     return -1
 }
 
-if {[skip_compile_feature_tests]} {
-    untested \
-	"compile command not supported (could not find libcc1 shared library?)"
-    return -1
-}
-
 gdb_breakpoint [gdb_get_line_number "break here" $srcfile]
 gdb_continue_to_breakpoint "testing location"
 
+if {[skip_compile_feature_untested "var = 0"]} {
+    return -1
+}
+
 CompileExpression::new "var"
 CompileExpression::test "d.a_" 1
 CompileExpression::test "d.b_" 2
diff --git a/gdb/testsuite/gdb.compile/compile-cplus-member.exp b/gdb/testsuite/gdb.compile/compile-cplus-member.exp
index 9325863a3bb..c18f965c9f3 100644
--- a/gdb/testsuite/gdb.compile/compile-cplus-member.exp
+++ b/gdb/testsuite/gdb.compile/compile-cplus-member.exp
@@ -33,15 +33,13 @@ if {![runto_main]} {
     return -1
 }
 
-if {[skip_compile_feature_tests]} {
-    untested \
-	"compile command not supported (could not find libcc1 shared library?)"
-    return -1
-}
-
 gdb_breakpoint [gdb_get_line_number "break here" $srcfile]
 gdb_continue_to_breakpoint "testing location"
 
+if {[skip_compile_feature_untested "var = 0"]} {
+    return -1
+}
+
 CompileExpression::new "var"
 CompileExpression::test "a.public_" 1
 CompileExpression::test "a.protected_" {(21|N::NB)}
diff --git a/gdb/testsuite/gdb.compile/compile-cplus-method.exp b/gdb/testsuite/gdb.compile/compile-cplus-method.exp
index 07e4a59bb36..2f96f5fb147 100644
--- a/gdb/testsuite/gdb.compile/compile-cplus-method.exp
+++ b/gdb/testsuite/gdb.compile/compile-cplus-method.exp
@@ -33,15 +33,13 @@ if {![runto_main]} {
     return -1
 }
 
-if {[skip_compile_feature_tests]} {
-    untested \
-	"compile command not supported (could not find libcc1 shared library?)"
-    return -1
-}
-
 gdb_breakpoint [gdb_get_line_number "break here" $srcfile]
 gdb_continue_to_breakpoint "testing location"
 
+if {[skip_compile_feature_untested "var = 0"]} {
+    return -1
+}
+
 CompileExpression::new "var"
 CompileExpression::test "a->get_var ()" 21
 CompileExpression::test "a->get_var (static_cast<unsigned long> (1))" 100
diff --git a/gdb/testsuite/gdb.compile/compile-cplus-namespace.exp b/gdb/testsuite/gdb.compile/compile-cplus-namespace.exp
index 4fc626beb22..ec4d0099846 100644
--- a/gdb/testsuite/gdb.compile/compile-cplus-namespace.exp
+++ b/gdb/testsuite/gdb.compile/compile-cplus-namespace.exp
@@ -33,15 +33,13 @@ if {![runto_main]} {
     return -1
 }
 
-if {[skip_compile_feature_tests]} {
-    untested \
-	"compile command not supported (could not find libcc1 shared library?)"
-    return -1
-}
-
 gdb_breakpoint [gdb_get_line_number "break here" $srcfile]
 gdb_continue_to_breakpoint "testing location"
 
+if {[skip_compile_feature_untested "var = 0"]} {
+    return -1
+}
+
 CompileExpression::new "var"
 CompileExpression::test "N1::N2::N3::N4::n4static" 400
 CompileExpression::test "N1::N2::N3::N4::S4::s4static" 40
diff --git a/gdb/testsuite/gdb.compile/compile-cplus-nested.exp b/gdb/testsuite/gdb.compile/compile-cplus-nested.exp
index 1d28e3471cb..a5ad87e49f9 100644
--- a/gdb/testsuite/gdb.compile/compile-cplus-nested.exp
+++ b/gdb/testsuite/gdb.compile/compile-cplus-nested.exp
@@ -33,15 +33,13 @@ if {![runto_main]} {
     return -1
 }
 
-if {[skip_compile_feature_tests]} {
-    untested \
-	"compile command not supported (could not find libcc1 shared library?)"
-    return -1
-}
-
 gdb_breakpoint [gdb_get_line_number "break here" $srcfile]
 gdb_continue_to_breakpoint "testing location"
 
+if {[skip_compile_feature_untested "var = 0"]} {
+    return -1
+}
+
 CompileExpression::new "var"
 CompileExpression::test "i1.a_" 2
 CompileExpression::test "i2.a_" 3
diff --git a/gdb/testsuite/gdb.compile/compile-cplus-print.exp b/gdb/testsuite/gdb.compile/compile-cplus-print.exp
index 67b39518b74..38dd922d27e 100644
--- a/gdb/testsuite/gdb.compile/compile-cplus-print.exp
+++ b/gdb/testsuite/gdb.compile/compile-cplus-print.exp
@@ -36,8 +36,7 @@ if ![runto_main] {
     return -1
 }
 
-if {[skip_compile_feature_tests]} {
-    untested "compile command not supported (could not find libcc1 shared library?)"
+if {[skip_compile_feature_untested]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.compile/compile-cplus-virtual.exp b/gdb/testsuite/gdb.compile/compile-cplus-virtual.exp
index ee1a4d92e38..3ccd681ea46 100644
--- a/gdb/testsuite/gdb.compile/compile-cplus-virtual.exp
+++ b/gdb/testsuite/gdb.compile/compile-cplus-virtual.exp
@@ -33,15 +33,13 @@ if {![runto_main]} {
     return -1
 }
 
-if {[skip_compile_feature_tests]} {
-    untested \
-	"compile command not supported (could not find libcc1 shared library?)"
-    return -1
-}
-
 gdb_breakpoint [gdb_get_line_number "break here" $srcfile]
 gdb_continue_to_breakpoint "testing location"
 
+if {[skip_compile_feature_untested "var = 0"]} {
+    return -1
+}
+
 CompileExpression::new "var"
 CompileExpression::test "b.doit ()" 2
 CompileExpression::test "c.doit ()" 3
diff --git a/gdb/testsuite/gdb.compile/compile-cplus.exp b/gdb/testsuite/gdb.compile/compile-cplus.exp
index dbdae5f8bf4..10e70e4a8e6 100644
--- a/gdb/testsuite/gdb.compile/compile-cplus.exp
+++ b/gdb/testsuite/gdb.compile/compile-cplus.exp
@@ -52,8 +52,10 @@ if ![runto_main] {
     return -1
 }
 
-if {[skip_compile_feature_tests]} {
-    untested "compile command not supported (could not find libcc1 shared library?)"
+gdb_breakpoint [gdb_get_line_number "break-here"]
+gdb_continue_to_breakpoint "break-here" ".* break-here .*"
+
+if {[skip_compile_feature_untested "var = 0"]} {
     return -1
 }
 
@@ -132,9 +134,6 @@ gdb_test "compile code *(volatile int *) 0 = 0;" \
     "The program being debugged was signaled while in a function called from GDB\\.\r\nGDB has restored the context to what it was before the call\\.\r\n.*" \
     "compile code segfault second"
 
-gdb_breakpoint [gdb_get_line_number "break-here"]
-gdb_continue_to_breakpoint "break-here" ".* break-here .*"
-
 # C++ Specific tests.
 ## Public methods and members
 
diff --git a/gdb/testsuite/gdb.compile/compile-ifunc.exp b/gdb/testsuite/gdb.compile/compile-ifunc.exp
index 07de52c3f67..5c51dd173c5 100644
--- a/gdb/testsuite/gdb.compile/compile-ifunc.exp
+++ b/gdb/testsuite/gdb.compile/compile-ifunc.exp
@@ -43,8 +43,7 @@ with_test_prefix "nodebug" {
     # feature check below will work.
     gdb_test_no_output "set language c" ""
 
-    if {[skip_compile_feature_tests]} {
-	untested "compile command not supported (could not find libcc1 shared library?)"
+    if {[skip_compile_feature_untested]} {
 	return -1
     }
 
diff --git a/gdb/testsuite/gdb.compile/compile-ops.exp b/gdb/testsuite/gdb.compile/compile-ops.exp
index cff2f946c93..e18f92eaa39 100644
--- a/gdb/testsuite/gdb.compile/compile-ops.exp
+++ b/gdb/testsuite/gdb.compile/compile-ops.exp
@@ -418,8 +418,7 @@ if ![runto func] {
     return -1
 }
 
-if {[skip_compile_feature_tests]} {
-    untested "compile command not supported (could not find libcc1 shared library?)"
+if {[skip_compile_feature_untested]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.compile/compile-print.exp b/gdb/testsuite/gdb.compile/compile-print.exp
index 5d01c1a53d0..61d13312e3a 100644
--- a/gdb/testsuite/gdb.compile/compile-print.exp
+++ b/gdb/testsuite/gdb.compile/compile-print.exp
@@ -25,8 +25,7 @@ if ![runto_main] {
     return -1
 }
 
-if {[skip_compile_feature_tests]} {
-    untested "compile command not supported (could not find libcc1 shared library?)"
+if {[skip_compile_feature_untested]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.compile/compile-setjmp.exp b/gdb/testsuite/gdb.compile/compile-setjmp.exp
index c883b2bd570..2f9d844c89b 100644
--- a/gdb/testsuite/gdb.compile/compile-setjmp.exp
+++ b/gdb/testsuite/gdb.compile/compile-setjmp.exp
@@ -25,8 +25,7 @@ if ![runto_main] {
     return -1
 }
 
-if {[skip_compile_feature_tests]} {
-    untested "compile command not supported (could not find libcc1 shared library?)"
+if {[skip_compile_feature_untested]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.compile/compile-tls.exp b/gdb/testsuite/gdb.compile/compile-tls.exp
index beffe7fd5be..6b349069ec7 100644
--- a/gdb/testsuite/gdb.compile/compile-tls.exp
+++ b/gdb/testsuite/gdb.compile/compile-tls.exp
@@ -27,8 +27,7 @@ if {![runto_main]} {
    return 0
 }
 
-if {[skip_compile_feature_tests]} {
-    untested "compile command not supported (could not find libcc1 shared library?)"
+if {[skip_compile_feature_untested]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.compile/compile.exp b/gdb/testsuite/gdb.compile/compile.exp
index c712070872a..b75ec4bd485 100644
--- a/gdb/testsuite/gdb.compile/compile.exp
+++ b/gdb/testsuite/gdb.compile/compile.exp
@@ -57,8 +57,7 @@ if ![runto_main] {
     return -1
 }
 
-if {[skip_compile_feature_tests]} {
-    untested "compile command not supported (could not find libcc1 shared library?)"
+if {[skip_compile_feature_untested]} {
     return -1
 }
 
diff --git a/gdb/testsuite/lib/compile-support.exp b/gdb/testsuite/lib/compile-support.exp
index 16b7c5dbc0d..b6427337c5b 100644
--- a/gdb/testsuite/lib/compile-support.exp
+++ b/gdb/testsuite/lib/compile-support.exp
@@ -15,16 +15,31 @@
 
 # Generic/oft used support routines for testing GDB's compile feature.
 
-# Return 1 if we should skip tests of the "compile" feature.
-# This must be invoked after the inferior has been started.
+# Helper function for skip_compile_feature_tests.  This does the real
+# work, but should not be called directly.  Returns a failure reason
+# (a string) on failure, or the empty string on success.
 
-proc skip_compile_feature_tests {} {
+proc _do_check_compile {expr} {
     global gdb_prompt
 
-    set result 0
-    gdb_test_multiple "compile code -- ;" "check for working compile command" {
+    set result ""
+    gdb_test_multiple "compile code -- $expr;" "check for working compile command" {
 	"Could not load libcc1.*\r\n$gdb_prompt $" {
-	    set result 1
+	    set result "could not find libcc1"
+	}
+	"Could not load libcp1.*\r\n$gdb_prompt $" {
+	    set result "could not find libcp1"
+	}
+	-re "WARNING .* there are active plugins, do not report this" {
+	    # Note that the regexp above does not check for the
+	    # prompt.  This avoids a gratuitous timeout.
+	    set result "GCC crashed"
+	}
+	-re "confused by earlier errors, bailing out" {
+	    # This scenario can happen when either GCC or GDB is
+	    # confused by some other debuginfo.
+	    # See PR compile/29541.
+	    set result "confused by glibc debuginfo"
 	}
 	-re "\r\n$gdb_prompt $" {
 	}
@@ -32,6 +47,27 @@ proc skip_compile_feature_tests {} {
     return $result
 }
 
+# Return 1 if we should skip tests of the "compile" feature.
+# This must be invoked after the inferior has been started.
+# EXPR is the expression to test, if any (using the default empty EXPR
+# works fine in most cases).
+
+proc skip_compile_feature_tests {{expr ""}} {
+    return [expr {[string length [_do_check_compile $expr]] > 0}]
+}
+
+# Like skip_compile_feature_tests, but also issue an "untested" when
+# skipping.
+
+proc skip_compile_feature_untested {{expr ""}} {
+    set output [_do_check_compile $expr]
+    if {[string length $output] > 0} {
+	untested "compile command not supported ($output)"
+	return 1
+    }
+    return 0
+}
+
 # This namespace provides some convenience functions for running
 # "compile code" and "compile print" tests.
 #
-- 
2.34.3


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Fix some problems in gdb.compile
  2022-11-30 19:35 Fix some problems in gdb.compile Tom Tromey
                   ` (2 preceding siblings ...)
  2022-11-30 19:35 ` [PATCH 3/3] Avoid timeouts in gdb.compile Tom Tromey
@ 2022-12-01  0:17 ` Kevin Buettner
  3 siblings, 0 replies; 5+ messages in thread
From: Kevin Buettner @ 2022-12-01  0:17 UTC (permalink / raw)
  To: Tom Tromey via Gdb-patches; +Cc: Tom Tromey

Hi Tom,

On Wed, 30 Nov 2022 12:35:28 -0700
Tom Tromey via Gdb-patches <gdb-patches@sourceware.org> wrote:

> I was looking into some irritating timeouts in gdb.compile and came up
> with this short series.  It doesn't fix any of the underlying issues,
> but it at least makes the tests complete reasonably quickly.

Thanks for working on this problem.

I've looked at all three patches in this series.  All three look good
to me.

Kevin


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-12-01  0:18 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-30 19:35 Fix some problems in gdb.compile Tom Tromey
2022-11-30 19:35 ` [PATCH 1/3] Remove one copy of skip_compile_feature_tests Tom Tromey
2022-11-30 19:35 ` [PATCH 2/3] Remove obsolete check from skip_compile_feature_tests Tom Tromey
2022-11-30 19:35 ` [PATCH 3/3] Avoid timeouts in gdb.compile Tom Tromey
2022-12-01  0:17 ` Fix some problems " Kevin Buettner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).