forked from Imagelibrary/binutils-gdb
Remove ExecutionInvoker
ExecutionInvoker is no longer really needed, due to the previous DAP
refactoring. This patch removes it in favor of an ordinary function.
One spot (the 'continue' request) could still have used it, but is
more succinctly expressed as a lambda.
Reviewed-by: Kévin Le Gouguec <legouguec@adacore.com>
(cherry picked from commit 68caad9d0b)
This commit is contained in:
@@ -17,7 +17,7 @@ import enum
|
|||||||
import gdb
|
import gdb
|
||||||
|
|
||||||
from .server import send_event
|
from .server import send_event
|
||||||
from .startup import in_gdb_thread, Invoker, log
|
from .startup import exec_and_log, in_gdb_thread, log
|
||||||
from .modules import is_module, make_module
|
from .modules import is_module, make_module
|
||||||
|
|
||||||
|
|
||||||
@@ -111,29 +111,14 @@ _expected_stop = None
|
|||||||
|
|
||||||
|
|
||||||
@in_gdb_thread
|
@in_gdb_thread
|
||||||
def expect_stop(reason):
|
def exec_and_expect_stop(cmd, reason):
|
||||||
"""Indicate that a stop is expected, for the reason given."""
|
"""Indicate that a stop is expected, then execute CMD"""
|
||||||
global _expected_stop
|
global _expected_stop
|
||||||
_expected_stop = reason
|
_expected_stop = reason
|
||||||
|
global _suppress_cont
|
||||||
|
_suppress_cont = True
|
||||||
# A wrapper for Invoker that also sets the expected stop.
|
# FIXME if the call fails should we clear _suppress_cont?
|
||||||
class ExecutionInvoker(Invoker):
|
exec_and_log(cmd)
|
||||||
"""A subclass of Invoker that sets the expected stop.
|
|
||||||
Note that this assumes that the command will restart the inferior,
|
|
||||||
so it will also cause ContinuedEvents to be suppressed."""
|
|
||||||
|
|
||||||
def __init__(self, cmd, expected):
|
|
||||||
super().__init__(cmd)
|
|
||||||
self.expected = expected
|
|
||||||
|
|
||||||
@in_gdb_thread
|
|
||||||
def __call__(self):
|
|
||||||
expect_stop(self.expected)
|
|
||||||
global _suppress_cont
|
|
||||||
_suppress_cont = True
|
|
||||||
# FIXME if the call fails should we clear _suppress_cont?
|
|
||||||
super().__call__()
|
|
||||||
|
|
||||||
|
|
||||||
@in_gdb_thread
|
@in_gdb_thread
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import gdb
|
|||||||
# These are deprecated in 3.9, but required in older versions.
|
# These are deprecated in 3.9, but required in older versions.
|
||||||
from typing import Mapping, Optional, Sequence
|
from typing import Mapping, Optional, Sequence
|
||||||
|
|
||||||
from .events import ExecutionInvoker
|
from .events import exec_and_expect_stop
|
||||||
from .server import request, capability
|
from .server import request, capability
|
||||||
from .startup import in_gdb_thread, exec_and_log
|
from .startup import in_gdb_thread, exec_and_log
|
||||||
|
|
||||||
@@ -85,4 +85,4 @@ def config_done(**args):
|
|||||||
if _program is not None:
|
if _program is not None:
|
||||||
# Suppress the continue event, but don't set any particular
|
# Suppress the continue event, but don't set any particular
|
||||||
# expected stop.
|
# expected stop.
|
||||||
ExecutionInvoker("run", None)()
|
exec_and_expect_stop("run", None)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
import gdb
|
import gdb
|
||||||
|
|
||||||
from .events import StopKinds, ExecutionInvoker
|
from .events import StopKinds, exec_and_expect_stop
|
||||||
from .server import capability, request
|
from .server import capability, request
|
||||||
from .startup import in_gdb_thread, send_gdb, send_gdb_with_response
|
from .startup import in_gdb_thread, send_gdb, send_gdb_with_response
|
||||||
from .state import set_thread
|
from .state import set_thread
|
||||||
@@ -57,7 +57,7 @@ def next(
|
|||||||
cmd = "next"
|
cmd = "next"
|
||||||
if granularity == "instruction":
|
if granularity == "instruction":
|
||||||
cmd += "i"
|
cmd += "i"
|
||||||
ExecutionInvoker(cmd, StopKinds.STEP)()
|
exec_and_expect_stop(cmd, StopKinds.STEP)
|
||||||
|
|
||||||
|
|
||||||
@capability("supportsSteppingGranularity")
|
@capability("supportsSteppingGranularity")
|
||||||
@@ -70,13 +70,13 @@ def step_in(
|
|||||||
cmd = "step"
|
cmd = "step"
|
||||||
if granularity == "instruction":
|
if granularity == "instruction":
|
||||||
cmd += "i"
|
cmd += "i"
|
||||||
ExecutionInvoker(cmd, StopKinds.STEP)()
|
exec_and_expect_stop(cmd, StopKinds.STEP)
|
||||||
|
|
||||||
|
|
||||||
@request("stepOut", response=False)
|
@request("stepOut", response=False)
|
||||||
def step_out(*, threadId: int, singleThread: bool = False, **args):
|
def step_out(*, threadId: int, singleThread: bool = False, **args):
|
||||||
_handle_thread_step(threadId, singleThread, True)
|
_handle_thread_step(threadId, singleThread, True)
|
||||||
ExecutionInvoker("finish", StopKinds.STEP)()
|
exec_and_expect_stop("finish", StopKinds.STEP)
|
||||||
|
|
||||||
|
|
||||||
# This is a server-side request because it is funny: it wants to
|
# This is a server-side request because it is funny: it wants to
|
||||||
@@ -87,5 +87,5 @@ def step_out(*, threadId: int, singleThread: bool = False, **args):
|
|||||||
@request("continue", on_dap_thread=True)
|
@request("continue", on_dap_thread=True)
|
||||||
def continue_request(*, threadId: int, singleThread: bool = False, **args):
|
def continue_request(*, threadId: int, singleThread: bool = False, **args):
|
||||||
locked = send_gdb_with_response(lambda: _handle_thread_step(threadId, singleThread))
|
locked = send_gdb_with_response(lambda: _handle_thread_step(threadId, singleThread))
|
||||||
send_gdb(ExecutionInvoker("continue", None))
|
send_gdb(lambda: exec_and_expect_stop("continue", None))
|
||||||
return {"allThreadsContinued": not locked}
|
return {"allThreadsContinued": not locked}
|
||||||
|
|||||||
@@ -13,10 +13,10 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from .events import StopKinds, ExecutionInvoker
|
from .events import StopKinds, exec_and_expect_stop
|
||||||
from .server import request
|
from .server import request
|
||||||
|
|
||||||
|
|
||||||
@request("pause", response=False)
|
@request("pause", response=False)
|
||||||
def pause(**args):
|
def pause(**args):
|
||||||
ExecutionInvoker("interrupt -a", StopKinds.PAUSE)()
|
exec_and_expect_stop("interrupt -a", StopKinds.PAUSE)
|
||||||
|
|||||||
Reference in New Issue
Block a user