diff options
author | Tom de Vries <tdevries@suse.de> | 2020-02-21 20:47:28 +0100 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2020-02-21 20:47:28 +0100 |
commit | 755251522afd2f33de7e64f8a30ddd732f30b2de (patch) | |
tree | 68a727dfb7b98add42281143cc0dc29d5051c901 | |
parent | e94e944bf2834d9bceafa1e1e4246bfa87b89677 (diff) | |
download | binutils-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/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/testsuite/gdb.go/methods.exp | 75 |
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" |