Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/lldb/source/Plugins/ScriptInterpreter/Python/Interfaces/ScriptedStopHookPythonInterface.cpp
213893 views
1
//===-- ScriptedStopHookPythonInterface.cpp -------------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#include "lldb/Core/PluginManager.h"
10
#include "lldb/Host/Config.h"
11
#include "lldb/Target/ExecutionContext.h"
12
#include "lldb/Utility/Log.h"
13
#include "lldb/lldb-enumerations.h"
14
15
#if LLDB_ENABLE_PYTHON
16
17
// clang-format off
18
// LLDB Python header must be included first
19
#include "../lldb-python.h"
20
//clang-format on
21
22
#include "../SWIGPythonBridge.h"
23
#include "../ScriptInterpreterPythonImpl.h"
24
#include "ScriptedStopHookPythonInterface.h"
25
26
using namespace lldb;
27
using namespace lldb_private;
28
using namespace lldb_private::python;
29
30
ScriptedStopHookPythonInterface::ScriptedStopHookPythonInterface(
31
ScriptInterpreterPythonImpl &interpreter)
32
: ScriptedStopHookInterface(), ScriptedPythonInterface(interpreter) {}
33
34
llvm::Expected<StructuredData::GenericSP>
35
ScriptedStopHookPythonInterface::CreatePluginObject(llvm::StringRef class_name,
36
lldb::TargetSP target_sp,
37
const StructuredDataImpl &args_sp) {
38
return ScriptedPythonInterface::CreatePluginObject(class_name, nullptr,
39
target_sp, args_sp);
40
}
41
42
llvm::Expected<bool>
43
ScriptedStopHookPythonInterface::HandleStop(ExecutionContext &exe_ctx,
44
lldb::StreamSP& output_sp) {
45
ExecutionContextRefSP exe_ctx_ref_sp =
46
std::make_shared<ExecutionContextRef>(exe_ctx);
47
Status error;
48
StructuredData::ObjectSP obj = Dispatch("handle_stop", error, exe_ctx_ref_sp, output_sp);
49
50
if (!ScriptedInterface::CheckStructuredDataObject(LLVM_PRETTY_FUNCTION, obj,
51
error)) {
52
if (!obj)
53
return true;
54
return error.ToError();
55
}
56
57
return obj->GetBooleanValue();
58
}
59
60
61
void ScriptedStopHookPythonInterface::Initialize() {
62
const std::vector<llvm::StringRef> ci_usages = {
63
"target stop-hook add -P <script-name> [-k key -v value ...]"};
64
const std::vector<llvm::StringRef> api_usages = {};
65
PluginManager::RegisterPlugin(
66
GetPluginNameStatic(),
67
llvm::StringRef("Perform actions whenever the process stops, before control is returned to the user."),
68
CreateInstance, eScriptLanguagePython, {ci_usages, api_usages});
69
}
70
71
void ScriptedStopHookPythonInterface::Terminate() {
72
PluginManager::UnregisterPlugin(CreateInstance);
73
}
74
75
#endif
76
77