* [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 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