aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2020-02-21 20:47:28 +0100
committerTom de Vries <tdevries@suse.de>2020-02-21 20:47:28 +0100
commit755251522afd2f33de7e64f8a30ddd732f30b2de (patch)
tree68a727dfb7b98add42281143cc0dc29d5051c901
parente94e944bf2834d9bceafa1e1e4246bfa87b89677 (diff)
downloadbinutils-755251522afd2f33de7e64f8a30ddd732f30b2de.zip
binutils-755251522afd2f33de7e64f8a30ddd732f30b2de.tar.gz
binutils-755251522afd2f33de7e64f8a30ddd732f30b2de.tar.bz2
[gdb/testsuite] Fix gdb.go/methods.exp
With gccgo-6/7, we have: ... FAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo XFAIL: gdb.go/methods.exp: going to first breakpoint \ (the program exited) FAIL: gdb.go/methods.exp: setting breakpoint at (*main.T).Bar XFAIL: gdb.go/methods.exp: going to second breakpoint \ (the program is no longer running) ... And with gccgo-8/9/10, we have: ... PASS: gdb.go/methods.exp: setting breakpoint 1 XFAIL: gdb.go/methods.exp: going to first breakpoint FAIL: gdb.go/methods.exp: setting breakpoint at (*main.T).Bar XFAIL: gdb.go/methods.exp: going to second breakpoint \ (the program exited) ... The first test passes and fails with different messages: ... FAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo ... or: ... PASS: gdb.go/methods.exp: setting breakpoint 1 ... Fix this by removing the explicit pass call and using the message argument for gdb_breakpoint, for both breakpoint locations. The setup of the xfails is non-specific: ... setup_xfail "*-*-*" ;# mangling issues IIRC ... so let's start with removing these. The first FAIL with gccgo-6: ... FAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo ... is due an incorrect DW_AT_name attribute: ... # <554> DW_AT_name : main.Foo.N6_main.T ... Fix this by recognizing the incorrect attribute, and xfailing the test. Furthermore, if setting the breakpoint fails, there's not much point in trying to continue to the breakpoint: ... FAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo FAIL: gdb.go/methods.exp: going to first breakpoint (the program exited) ... Fix this by skipping the second test if the first one fails, also for the second breakpoint. With gccgo-10, we manage to set the first breakpoint, but continuing to breakpoint test fails: ... PASS: gdb.go/methods.exp: setting breakpoint 1 FAIL: gdb.go/methods.exp: going to first breakpoint ... This is due to an incorrect regexp, requiring a colon in front of the breakpoint location. Fix this for both breakpoints. Setting the second breakpoint fails: ... FAIL: gdb.go/methods.exp: setting breakpoint at (*main.T).Bar ... presumably because the breakpoint location "(*main.T).Bar" does not follow the naming convention explained at https://golang.org/doc/gdb#Naming. Fix this by updating the breakpoint location to "main.(*T).Bar". Still this test fails, for gccgo-6/7 because of an incorrect DW_AT_name attribute: ... # <529> DW_AT_name : main.Bar.pN6_main.T ... and for gccgo-8/9/10 because of incorrect DW_AT_name/DW_AT_linkage_name attributes (filed as gcc PR93866): ... # <6e5> DW_AT_name : main.Bar..1main.T # <6ec> DW_AT_linkage_name: main.T.Bar .. Add xfails for both of these. All in all, now we have with gccgo-6/7: ... XFAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo XFAIL: gdb.go/methods.exp: setting breakpoint at main.(*T).Bar ... and with gccgo-8/9/10, we have: ... PASS: gdb.go/methods.exp: setting breakpoint at main.T.Foo PASS: gdb.go/methods.exp: going to first breakpoint XFAIL: gdb.go/methods.exp: setting breakpoint at main.(*T).Bar ... Tested on x86_64-linux with gccgo-6/7/8/9/10. gdb/testsuite/ChangeLog: 2020-02-21 Tom de Vries <tdevries@suse.de> PR go/18926 * lib/gdb.exp (bp_location2/bp_location2_regexp): Fix. Remove blanket xfails. Use message argument for gdb_breakpoint. Make continuing to breakpoint test conditional on setting breakpoint. Fix continuing to breakpoint regexp. Add xfails for gccgo-6/7 DW_AT_name attribute. Add xfail for GCC PR93866.
-rw-r--r--gdb/testsuite/ChangeLog9
-rw-r--r--gdb/testsuite/gdb.go/methods.exp75
2 files changed, 74 insertions, 10 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 6e9f94f..5dd1d33 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2020-02-21 Tom de Vries <tdevries@suse.de>
+
+ PR go/18926
+ * lib/gdb.exp (bp_location2/bp_location2_regexp): Fix.
+ Remove blanket xfails. Use message argument for gdb_breakpoint.
+ Make continuing to breakpoint test conditional on setting breakpoint.
+ Fix continuing to breakpoint regexp. Add xfails for gccgo-6/7
+ DW_AT_name attribute. Add xfail for GCC PR93866.
+
2020-02-21 Andrew Burgess <andrew.burgess@embecosm.com>
* gdb.dwarf2/cpp-linkage-name.c: New file.
diff --git a/gdb/testsuite/gdb.go/methods.exp b/gdb/testsuite/gdb.go/methods.exp
index e698cf3..b24ee14 100644
--- a/gdb/testsuite/gdb.go/methods.exp
+++ b/gdb/testsuite/gdb.go/methods.exp
@@ -29,22 +29,77 @@ if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug go}]
}
set bp_location1 {main.T.Foo}
-set bp_location2 {(*main.T).Bar}
-set bp_location2_regexp {\(*main.T\).Bar}
+set bp_location2 {main.(*T).Bar}
+set bp_location2_regexp {main.\(\*T\).Bar}
if { [go_runto_main] < 0 } {
untested "could not run to main"
return -1
}
-if { [gdb_breakpoint ${bp_location1}] } {
- pass "setting breakpoint 1"
+set found_wrong_foo 0
+set found_wrong_bar 0
+gdb_test_multiple "maintenance print symbols" "" {
+ -re "^\r\n void main.Foo.N6_main.T\[^\r\n\]*(?=\r\n)" {
+ set found_wrong_foo 1
+ exp_continue
+ }
+ -re "^\r\n void main.Bar.pN6_main.T\[^\r\n\]*(?=\r\n)" {
+ set found_wrong_bar 1
+ exp_continue
+ }
+ -re "^\r\n void main.T.Bar\[^\r\n\]*(?=\r\n)" {
+ set found_wrong_bar 2
+ exp_continue
+ }
+ -re "\r\n$gdb_prompt $" {
+ pass $gdb_test_name
+ }
+ -re "\r\n\[^\r\n\]*(?=\r\n)" {
+ exp_continue
+ }
}
-setup_xfail "*-*-*" ;# mangling issues IIRC
-gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "going to first breakpoint"
-if { [gdb_breakpoint ${bp_location2}] } {
- pass "setting breakpoint 2"
+if { $found_wrong_foo } {
+ # We have with gccgo-6/7:
+ # <1><553>: Abbrev Number: 21 (DW_TAG_subprogram)
+ # <554> DW_AT_name : main.Foo.N6_main.T
+ setup_xfail "*-*-*"
+} else {
+ # We have with gccgo-8/9/10:
+ # <1><1e24>: Abbrev Number: 40 (DW_TAG_subprogram)
+ # <1e25> DW_AT_name : main.Foo.main.T
+ # <1e2c> DW_AT_linkage_name: main.T.Foo
+
+ # For reference: with go1.11.13:
+ # <1><6c46b>: Abbrev Number: 2 (DW_TAG_subprogram)
+ # <6c46c> DW_AT_name : main.T.Foo
+}
+
+if { [gdb_breakpoint ${bp_location1} message]} {
+ gdb_test "cont" "Breakpoint .*, ${bp_location1}.*" \
+ "going to first breakpoint"
+}
+
+if { $found_wrong_bar == 1 } {
+ # We have with gccgo-6/7:
+ # <1><528>: Abbrev Number: 19 (DW_TAG_subprogram)
+ # <529> DW_AT_name : main.Bar.pN6_main.T
+ setup_xfail "*-*-*"
+} elseif { $found_wrong_bar == 2 } {
+ # We have with gccgo-8/9/10:
+ # <1><6e4>: Abbrev Number: 24 (DW_TAG_subprogram)
+ # <6e5> DW_AT_name : main.Bar..1main.T
+ # <6ec> DW_AT_linkage_name: main.T.Bar
+ # xfail for GCC PR93866
+ setup_xfail "*-*-*"
+} else {
+ # For reference: with go1.11.13:
+ # <1><6c49a>: Abbrev Number: 2 (DW_TAG_subprogram)
+ # <6c49b> DW_AT_name : main.(*T).Bar
+ }
+
+if { [gdb_breakpoint ${bp_location2} message] } {
+ gdb_test "cont" "Breakpoint .*, ${bp_location2_regexp}.*" \
+ "going to second breakpoint"
}
-setup_xfail "*-*-*" ;# mangling issues IIRC
-gdb_test "cont" "Breakpoint .*:${bp_location2_regexp}.*" "going to second breakpoint"