diff options
author | Tom de Vries <tdevries@suse.de> | 2024-12-10 11:53:31 +0100 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2024-12-10 11:53:31 +0100 |
commit | c79fb66c7837cbc3b5f3915d8c23bb5747235c34 (patch) | |
tree | b6ca85a488018983917ea8c3190a5f7244ae38fd /gdb/testsuite/gdb.dap | |
parent | 8c59e9b189560237811c1ac185e1941a7ae6f367 (diff) | |
download | binutils-c79fb66c7837cbc3b5f3915d8c23bb5747235c34.zip binutils-c79fb66c7837cbc3b5f3915d8c23bb5747235c34.tar.gz binutils-c79fb66c7837cbc3b5f3915d8c23bb5747235c34.tar.bz2 |
[gdb/testsuite] Fix gdb.dap/step-out.exp on s390x
With test-case gdb.dap/step-out.exp on s390x-linux, I get:
...
>>> {"seq": 7, "type": "request", "command": "scopes", "arguments": {"frameId": 0}}
Content-Length: 569^M
^M
{"request_seq": 7, "type": "response", "command": "scopes", "body": {"scopes": [{"variablesReference": 1, "name": "Locals", "presentationHint": "locals", "expensive": false, "namedVariables": 1, "line": 35, "source": {"name": "step-out.c", "path": "/home/vries/gdb/src/gdb/testsuite/gdb.dap/step-out.c"}}, {"variablesReference": 2, "name": "Registers", "presentationHint": "registers", "expensive": false, "namedVariables": 114, "line": 35, "source": {"name": "step-out.c", "path": "/home/vries/gdb/src/gdb/testsuite/gdb.dap/step-out.c"}}]}, "success": true, "seq": 21}PASS: gdb.dap/step-out.exp: get scopes success
FAIL: gdb.dap/step-out.exp: three scopes
...
The problem is that the test-case expects three scopes:
...
lassign $scopes scope reg_scope return_scope
...
but the return_scope is missing because this doesn't work:
...
$ gdb -q -batch outputs/gdb.dap/step-out/step-out \
-ex "b function_breakpoint_here" \
-ex run \
-ex finish
...
Value returned has type: struct result. Cannot determine contents
...
This is likely caused by a problem in gdb, but there's nothing wrong the DAP
support.
Fix this by:
- allowing two scopes, and
- declaring the tests of return_scope unsupported.
Tested on s390x-linux.
Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb/testsuite/gdb.dap')
-rw-r--r-- | gdb/testsuite/gdb.dap/step-out.exp | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/gdb/testsuite/gdb.dap/step-out.exp b/gdb/testsuite/gdb.dap/step-out.exp index cfe730e..e9d7a25 100644 --- a/gdb/testsuite/gdb.dap/step-out.exp +++ b/gdb/testsuite/gdb.dap/step-out.exp @@ -60,31 +60,37 @@ set scopes [dap_check_request_and_response "get scopes" scopes \ [format {o frameId [i %d]} $frame_id]] set scopes [dict get [lindex $scopes 0] body scopes] -gdb_assert {[llength $scopes] == 3} "three scopes" +gdb_assert {[llength $scopes] == 2 || [llength $scopes] == 3} "two or three scopes" lassign $scopes scope reg_scope return_scope -gdb_assert {[dict get $scope name] == "Locals"} "scope is locals" -gdb_assert {[dict get $scope presentationHint] == "locals"} \ - "locals presentation hint" -gdb_assert {[dict get $scope namedVariables] == 1} "one var in scope" - -gdb_assert {[dict get $return_scope name] == "Return"} "scope is return" -gdb_assert {[dict get $return_scope presentationHint] == "returnValue"} \ - "returnValue presentation hint" -gdb_assert {[dict get $return_scope namedVariables] == 1} \ - "one var in return scope" - -set num [dict get $return_scope variablesReference] -set refs [lindex [dap_check_request_and_response "fetch arguments" \ - "variables" \ - [format {o variablesReference [i %d]} $num]] \ - 0] -set varlist [lindex [dict get $refs body variables] 0] - -gdb_assert {[dict get $varlist variablesReference] > 0} \ - "variable has children" -gdb_assert {[dict get $varlist name] == "(return)"} \ - "variable is return value" + +set test "scope is locals" +if { $return_scope == "" } { + unsupported $test +} else { + gdb_assert {[dict get $scope name] == "Locals"} $test + gdb_assert {[dict get $scope presentationHint] == "locals"} \ + "locals presentation hint" + gdb_assert {[dict get $scope namedVariables] == 1} "one var in scope" + + gdb_assert {[dict get $return_scope name] == "Return"} "scope is return" + gdb_assert {[dict get $return_scope presentationHint] == "returnValue"} \ + "returnValue presentation hint" + gdb_assert {[dict get $return_scope namedVariables] == 1} \ + "one var in return scope" + + set num [dict get $return_scope variablesReference] + set refs [lindex [dap_check_request_and_response "fetch arguments" \ + "variables" \ + [format {o variablesReference [i %d]} $num]] \ + 0] + set varlist [lindex [dict get $refs body variables] 0] + + gdb_assert {[dict get $varlist variablesReference] > 0} \ + "variable has children" + gdb_assert {[dict get $varlist name] == "(return)"} \ + "variable is return value" +} set response_and_events [dap_request_and_response stepOut {o threadId [i 1]}] set response [lindex $response_and_events 0] |