From: Tom Tromey Date: Tue, 9 May 2023 20:29:45 +0000 (-0600) Subject: Implement DAP stepOut request X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3eb64586f07e41bd6b6ef2276bd24b92b0ed4d91;p=binutils-gdb.git Implement DAP stepOut request This implements the DAP "stepOut" request. --- diff --git a/gdb/python/lib/gdb/dap/next.py b/gdb/python/lib/gdb/dap/next.py index 636dfce997d..232b1529fe5 100644 --- a/gdb/python/lib/gdb/dap/next.py +++ b/gdb/python/lib/gdb/dap/next.py @@ -44,6 +44,12 @@ def stepIn(*, threadId, granularity="statement", **args): send_gdb(ExecutionInvoker(cmd, StopKinds.STEP)) +@request("stepOut") +def step_out(*, threadId): + _handle_thread_step(threadId) + send_gdb(ExecutionInvoker("finish", StopKinds.STEP)) + + @request("continue") def continue_request(**args): send_gdb(ExecutionInvoker("continue", None)) diff --git a/gdb/testsuite/gdb.dap/basic-dap.c b/gdb/testsuite/gdb.dap/basic-dap.c index a8327141fb0..2570b8b0702 100644 --- a/gdb/testsuite/gdb.dap/basic-dap.c +++ b/gdb/testsuite/gdb.dap/basic-dap.c @@ -35,10 +35,18 @@ address_breakpoint_here () { } -int main () +int +line_breakpoint_here () { do_not_stop_here (); function_breakpoint_here (); address_breakpoint_here (); return 0; /* BREAK */ } + + +int +main () +{ + return line_breakpoint_here (); +} diff --git a/gdb/testsuite/gdb.dap/basic-dap.exp b/gdb/testsuite/gdb.dap/basic-dap.exp index f28239d8268..d4dbdac70ff 100644 --- a/gdb/testsuite/gdb.dap/basic-dap.exp +++ b/gdb/testsuite/gdb.dap/basic-dap.exp @@ -146,6 +146,11 @@ dap_wait_for_event_and_check "stopped at line breakpoint" stopped \ "body reason" breakpoint \ "body hitBreakpointIds" $line_bpno +dap_check_request_and_response "return from function" stepOut \ + {o threadId [i 1]} +dap_wait_for_event_and_check "stopped after return" stopped \ + "body reason" step + set obj [dap_check_request_and_response "evaluate global in main" \ evaluate {o expression [s global_variable]}] dap_match_values "global value in main" [lindex $obj 0] \