mib created this revision. mib added reviewers: bulbazord, JDevlieghere, jingham. mib added a project: LLDB. Herald added a project: All. mib requested review of this revision. Herald added a subscriber: lldb-commits.
This patch introduces a new method to the SBProcess API called ForceScriptedState. As the name suggests, this affordance will allow the user to alter the private state of the scripted process programatically. This is necessary to update the scripted process state when perform interactive debugging. Signed-off-by: Med Ismail Bennani <medismail.benn...@gmail.com> Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D145294 Files: lldb/include/lldb/API/SBProcess.h lldb/include/lldb/Target/Process.h lldb/source/API/SBProcess.cpp lldb/source/Plugins/Process/scripted/ScriptedProcess.h Index: lldb/source/Plugins/Process/scripted/ScriptedProcess.h =================================================================== --- lldb/source/Plugins/Process/scripted/ScriptedProcess.h +++ lldb/source/Plugins/Process/scripted/ScriptedProcess.h @@ -88,6 +88,10 @@ void *GetImplementation() override; + void ForceScriptedState(lldb::StateType state) override { + SetPrivateState(state); + } + protected: ScriptedProcess(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp, const ScriptedMetadata &scripted_metadata, Status &error); Index: lldb/source/API/SBProcess.cpp =================================================================== --- lldb/source/API/SBProcess.cpp +++ lldb/source/API/SBProcess.cpp @@ -466,6 +466,16 @@ return sb_event; } +void SBProcess::ForceScriptedState(StateType new_state) { + LLDB_INSTRUMENT_VA(this, new_state); + + if (ProcessSP process_sp = GetSP()) { + std::lock_guard<std::recursive_mutex> guard( + process_sp->GetTarget().GetAPIMutex()); + process_sp->ForceScriptedState(new_state); + } +} + StateType SBProcess::GetState() { LLDB_INSTRUMENT_VA(this); Index: lldb/include/lldb/Target/Process.h =================================================================== --- lldb/include/lldb/Target/Process.h +++ lldb/include/lldb/Target/Process.h @@ -2544,6 +2544,8 @@ virtual void *GetImplementation() { return nullptr; } + virtual void ForceScriptedState(lldb::StateType state) {} + protected: friend class Trace; Index: lldb/include/lldb/API/SBProcess.h =================================================================== --- lldb/include/lldb/API/SBProcess.h +++ lldb/include/lldb/API/SBProcess.h @@ -187,6 +187,14 @@ /// The stop event corresponding to stop ID. lldb::SBEvent GetStopEventForStopID(uint32_t stop_id); + /// If the process is a scripted process, changes its private state. + /// No-op otherwise. + /// + /// \param [in] new_state + /// The new private state that the scripted process should be set to. + /// + void ForceScriptedState(StateType new_state); + size_t ReadMemory(addr_t addr, void *buf, size_t size, lldb::SBError &error); size_t WriteMemory(addr_t addr, const void *buf, size_t size,
Index: lldb/source/Plugins/Process/scripted/ScriptedProcess.h =================================================================== --- lldb/source/Plugins/Process/scripted/ScriptedProcess.h +++ lldb/source/Plugins/Process/scripted/ScriptedProcess.h @@ -88,6 +88,10 @@ void *GetImplementation() override; + void ForceScriptedState(lldb::StateType state) override { + SetPrivateState(state); + } + protected: ScriptedProcess(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp, const ScriptedMetadata &scripted_metadata, Status &error); Index: lldb/source/API/SBProcess.cpp =================================================================== --- lldb/source/API/SBProcess.cpp +++ lldb/source/API/SBProcess.cpp @@ -466,6 +466,16 @@ return sb_event; } +void SBProcess::ForceScriptedState(StateType new_state) { + LLDB_INSTRUMENT_VA(this, new_state); + + if (ProcessSP process_sp = GetSP()) { + std::lock_guard<std::recursive_mutex> guard( + process_sp->GetTarget().GetAPIMutex()); + process_sp->ForceScriptedState(new_state); + } +} + StateType SBProcess::GetState() { LLDB_INSTRUMENT_VA(this); Index: lldb/include/lldb/Target/Process.h =================================================================== --- lldb/include/lldb/Target/Process.h +++ lldb/include/lldb/Target/Process.h @@ -2544,6 +2544,8 @@ virtual void *GetImplementation() { return nullptr; } + virtual void ForceScriptedState(lldb::StateType state) {} + protected: friend class Trace; Index: lldb/include/lldb/API/SBProcess.h =================================================================== --- lldb/include/lldb/API/SBProcess.h +++ lldb/include/lldb/API/SBProcess.h @@ -187,6 +187,14 @@ /// The stop event corresponding to stop ID. lldb::SBEvent GetStopEventForStopID(uint32_t stop_id); + /// If the process is a scripted process, changes its private state. + /// No-op otherwise. + /// + /// \param [in] new_state + /// The new private state that the scripted process should be set to. + /// + void ForceScriptedState(StateType new_state); + size_t ReadMemory(addr_t addr, void *buf, size_t size, lldb::SBError &error); size_t WriteMemory(addr_t addr, const void *buf, size_t size,
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits