c883ee0252
* Handle librpm == "" and nolibrpm == "". - Maintenance script qa-remote.sh: * Make "Get remote testsuite results" even more verbose. * Make hardcoded pattern gdb-testresults-12.1-*.*.rpm more generic. * Add missing setting of rpm variable in "Getting rpms" case. - Patches added (backport from trunk): * gdb-testsuite-fix-gdb.base-break-idempotent.exp-on-ppc.patch * powerpc-fix-gdb.base-watchpoint.exp-on-power-9.patch OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gdb?expand=0&rev=340
94 lines
3.1 KiB
Diff
94 lines
3.1 KiB
Diff
gdb/testsuite: fix gdb.base/break-idempotent.exp on ppc
|
|
|
|
When running the gdb.base/break-idempotent.exp test on ppc, I was
|
|
seeing some test failures (or rather errors), that looked like this:
|
|
|
|
(gdb) watch local
|
|
Hardware watchpoint 2: local
|
|
|
|
has_hw_wp_support: Hardware watchpoint detected
|
|
ERROR: no fileid for gcc2-power8
|
|
ERROR: Couldn't send delete breakpoints to GDB.
|
|
ERROR OCCURED: can't read "gdb_spawn_id": no such variable
|
|
while executing
|
|
"expect {
|
|
-i 1000 -timeout 100
|
|
-re ".*A problem internal to GDB has been detected" {
|
|
fail "$message (GDB internal error)"
|
|
gdb_internal_erro..."
|
|
("uplevel" body line 1)
|
|
invoked from within
|
|
|
|
What happens is that in break-idempotent.exp we basically do this:
|
|
|
|
if {[prepare_for_testing "failed to prepare" $binfile $srcfile $opts]} {
|
|
continue
|
|
}
|
|
|
|
# ....
|
|
|
|
if {![skip_hw_watchpoint_tests]} {
|
|
test_break $always_inserted "watch"
|
|
}
|
|
|
|
The problem with this is that skip_hw_watchpoint_tests, includes this:
|
|
|
|
if { [istarget "i?86-*-*"]
|
|
|| [istarget "x86_64-*-*"]
|
|
|| [istarget "ia64-*-*"]
|
|
|| [istarget "arm*-*-*"]
|
|
|| [istarget "aarch64*-*-*"]
|
|
|| ([istarget "powerpc*-*-linux*"] && [has_hw_wp_support])
|
|
|| [istarget "s390*-*-*"] } {
|
|
return 0
|
|
}
|
|
|
|
For powerpc only we call has_hw_wp_support. This is a caching proc
|
|
that runs a test within GDB to detect if we have hardware watchpoint
|
|
support or not.
|
|
|
|
Unfortunately, to run this test we restart GDB, and when the test has
|
|
completed, we exit GDB. This means that in break-idempotent.exp, when
|
|
we call skip_hw_watchpoint_tests for the first time on powerpc, GDB
|
|
will unexpectedly be exited. When we later call delete_breakpoints we
|
|
see the errors I reported above.
|
|
|
|
The fix is to call skip_hw_watchpoint_tests early, before we start GDB
|
|
as part of the break-idempotent.exp script, and store the result in a
|
|
variable, we can then check this variable in the script as needed.
|
|
|
|
After this change break-idempotent.exp runs fine on powerpc.
|
|
|
|
Co-authored-by: Andrew Burgess <aburgess@redhat.com>
|
|
|
|
---
|
|
gdb/testsuite/gdb.base/break-idempotent.exp | 8 +++++++-
|
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/gdb/testsuite/gdb.base/break-idempotent.exp b/gdb/testsuite/gdb.base/break-idempotent.exp
|
|
index 29002f103a8..837ac000b57 100644
|
|
--- a/gdb/testsuite/gdb.base/break-idempotent.exp
|
|
+++ b/gdb/testsuite/gdb.base/break-idempotent.exp
|
|
@@ -36,6 +36,12 @@
|
|
|
|
standard_testfile
|
|
|
|
+# The skip_hw_watchpoint_tests starts GDB on a small test program to
|
|
+# check if HW watchpoints are supported. We do not want to restart
|
|
+# GDB after this test script has itself started GDB, so call
|
|
+# skip_hw_watchpoint_tests first and cache the result.
|
|
+set skip_hw_watchpoint_tests_p [skip_hw_watchpoint_tests]
|
|
+
|
|
# Force a breakpoint re-set in GDB. Currently this is done by
|
|
# reloading symbols with the "file" command.
|
|
|
|
@@ -174,7 +180,7 @@ foreach_with_prefix pie { "nopie" "pie" } {
|
|
test_break $always_inserted "hbreak"
|
|
}
|
|
|
|
- if {![skip_hw_watchpoint_tests]} {
|
|
+ if {!$skip_hw_watchpoint_tests_p} {
|
|
test_break $always_inserted "watch"
|
|
}
|
|
|