[lldb][NFC] Fix all formatting errors in .cpp file headers
Summary:
A *.cpp file header in LLDB (and in LLDB) should like this:
```
//===-- TestUtilities.cpp -------------------------------------------------===//
```
However in LLDB most of our source files have arbitrary changes to this format and
these changes are spreading through LLDB as folks usually just use the existing
source files as templates for their new files (most notably the unnecessary
editor language indicator `-*- C++ -*-` is spreading and in every review
someone is pointing out that this is wrong, resulting in people pointing out that this
is done in the same way in other files).
This patch removes most of these inconsistencies including the editor language indicators,
all the different missing/additional '-' characters, files that center the file name, missing
trailing `===//` (mostly caused by clang-format breaking the line).
Reviewers: aprantl, espindola, jfb, shafik, JDevlieghere
Reviewed By: JDevlieghere
Subscribers: dexonsmith, wuzish, emaste, sdardis, nemanjai, kbarton, MaskRay, atanasyan, arphaman, jfb, abidh, jsji, JDevlieghere, usaxena95, lldb-commits
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D73258
2020-01-24 08:23:27 +01:00
|
|
|
//===-- PythonTestSuite.cpp -----------------------------------------------===//
|
2015-11-13 01:24:35 +00:00
|
|
|
//
|
2019-01-19 08:50:56 +00:00
|
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
|
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
|
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
2015-11-13 01:24:35 +00:00
|
|
|
//
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
#include "Plugins/ScriptInterpreter/Python/SWIGPythonBridge.h"
|
2015-11-13 01:24:35 +00:00
|
|
|
#include "Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.h"
|
2019-03-29 20:56:52 +00:00
|
|
|
#include "Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h"
|
2021-11-22 16:32:44 +01:00
|
|
|
#include "Plugins/ScriptInterpreter/Python/lldb-python.h"
|
2021-09-03 17:35:02 +00:00
|
|
|
|
2018-10-31 21:49:27 +00:00
|
|
|
#include "lldb/Host/FileSystem.h"
|
2015-11-13 01:24:35 +00:00
|
|
|
#include "lldb/Host/HostInfo.h"
|
|
|
|
|
|
|
|
|
|
#include "PythonTestSuite.h"
|
|
|
|
|
|
|
|
|
|
using namespace lldb_private;
|
2019-03-29 20:56:52 +00:00
|
|
|
class TestScriptInterpreterPython : public ScriptInterpreterPythonImpl {
|
2019-03-25 21:07:53 +00:00
|
|
|
public:
|
2019-03-29 20:56:52 +00:00
|
|
|
using ScriptInterpreterPythonImpl::Initialize;
|
|
|
|
|
using ScriptInterpreterPythonImpl::InitializePrivate;
|
2019-03-25 21:07:53 +00:00
|
|
|
};
|
2015-11-13 01:24:35 +00:00
|
|
|
|
|
|
|
|
void PythonTestSuite::SetUp() {
|
2018-10-31 21:49:27 +00:00
|
|
|
FileSystem::Initialize();
|
2015-11-13 01:24:35 +00:00
|
|
|
HostInfoBase::Initialize();
|
|
|
|
|
// ScriptInterpreterPython::Initialize() depends on HostInfo being
|
|
|
|
|
// initializedso it can compute the python directory etc.
|
2019-03-25 21:07:53 +00:00
|
|
|
TestScriptInterpreterPython::Initialize();
|
|
|
|
|
TestScriptInterpreterPython::InitializePrivate();
|
2016-09-06 20:57:50 +00:00
|
|
|
|
2015-11-13 01:24:35 +00:00
|
|
|
// Although we don't care about concurrency for the purposes of running
|
|
|
|
|
// this test suite, Python requires the GIL to be locked even for
|
|
|
|
|
// deallocating memory, which can happen when you call Py_DECREF or
|
|
|
|
|
// Py_INCREF. So acquire the GIL for the entire duration of this
|
|
|
|
|
// test suite.
|
|
|
|
|
m_gil_state = PyGILState_Ensure();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void PythonTestSuite::TearDown() {
|
|
|
|
|
PyGILState_Release(m_gil_state);
|
|
|
|
|
|
2019-03-25 21:07:53 +00:00
|
|
|
TestScriptInterpreterPython::Terminate();
|
2018-11-01 16:43:34 +00:00
|
|
|
HostInfoBase::Terminate();
|
|
|
|
|
FileSystem::Terminate();
|
2015-11-13 01:24:35 +00:00
|
|
|
}
|
2019-03-26 01:11:15 +00:00
|
|
|
|
|
|
|
|
// The following functions are the Pythonic implementations of the required
|
|
|
|
|
// callbacks. Because they're defined in libLLDB which we cannot link for the
|
|
|
|
|
// unit test, we have a 'default' implementation here.
|
|
|
|
|
|
|
|
|
|
#if PY_MAJOR_VERSION >= 3
|
|
|
|
|
extern "C" PyObject *PyInit__lldb(void) { return nullptr; }
|
|
|
|
|
#else
|
|
|
|
|
extern "C" void init_lldb(void) {}
|
2019-12-03 09:53:26 -05:00
|
|
|
#endif
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
llvm::Expected<bool> lldb_private::LLDBSwigPythonBreakpointCallbackFunction(
|
2019-03-26 01:11:15 +00:00
|
|
|
const char *python_function_name, const char *session_dictionary_name,
|
|
|
|
|
const lldb::StackFrameSP &sb_frame,
|
2019-10-25 14:05:07 -07:00
|
|
|
const lldb::BreakpointLocationSP &sb_bp_loc,
|
2021-11-25 14:01:41 +01:00
|
|
|
const StructuredDataImpl &args_impl) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
bool lldb_private::LLDBSwigPythonWatchpointCallbackFunction(
|
2019-03-26 01:11:15 +00:00
|
|
|
const char *python_function_name, const char *session_dictionary_name,
|
|
|
|
|
const lldb::StackFrameSP &sb_frame, const lldb::WatchpointSP &sb_wp) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
bool lldb_private::LLDBSwigPythonCallTypeScript(
|
|
|
|
|
const char *python_function_name, const void *session_dictionary,
|
2019-03-26 01:11:15 +00:00
|
|
|
const lldb::ValueObjectSP &valobj_sp, void **pyfunct_wrapper,
|
|
|
|
|
const lldb::TypeSummaryOptionsSP &options_sp, std::string &retval) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
void *lldb_private::LLDBSwigPythonCreateSyntheticProvider(
|
|
|
|
|
const char *python_class_name, const char *session_dictionary_name,
|
|
|
|
|
const lldb::ValueObjectSP &valobj_sp) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
void *lldb_private::LLDBSwigPythonCreateCommandObject(
|
|
|
|
|
const char *python_class_name, const char *session_dictionary_name,
|
|
|
|
|
const lldb::DebuggerSP debugger_sp) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
void *lldb_private::LLDBSwigPythonCreateScriptedThreadPlan(
|
2019-03-26 01:11:15 +00:00
|
|
|
const char *python_class_name, const char *session_dictionary_name,
|
2021-11-25 14:01:41 +01:00
|
|
|
const StructuredDataImpl &args_data, std::string &error_string,
|
2019-03-26 01:11:15 +00:00
|
|
|
const lldb::ThreadPlanSP &thread_plan_sp) {
|
|
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
bool lldb_private::LLDBSWIGPythonCallThreadPlan(void *implementor,
|
|
|
|
|
const char *method_name,
|
|
|
|
|
Event *event_sp,
|
|
|
|
|
bool &got_error) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
void *lldb_private::LLDBSwigPythonCreateScriptedBreakpointResolver(
|
2019-03-26 01:11:15 +00:00
|
|
|
const char *python_class_name, const char *session_dictionary_name,
|
2021-11-25 14:01:41 +01:00
|
|
|
const StructuredDataImpl &args, const lldb::BreakpointSP &bkpt_sp) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
unsigned int lldb_private::LLDBSwigPythonCallBreakpointResolver(
|
|
|
|
|
void *implementor, const char *method_name,
|
|
|
|
|
lldb_private::SymbolContext *sym_ctx) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
size_t lldb_private::LLDBSwigPython_CalculateNumChildren(PyObject *implementor,
|
|
|
|
|
uint32_t max) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
PyObject *lldb_private::LLDBSwigPython_GetChildAtIndex(PyObject *implementor,
|
|
|
|
|
uint32_t idx) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
int lldb_private::LLDBSwigPython_GetIndexOfChildWithName(
|
|
|
|
|
PyObject *implementor, const char *child_name) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
void *lldb_private::LLDBSWIGPython_CastPyObjectToSBData(PyObject *data) {
|
2021-03-23 16:22:18 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
void *lldb_private::LLDBSWIGPython_CastPyObjectToSBError(PyObject *data) {
|
2021-03-23 16:22:18 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
void *lldb_private::LLDBSWIGPython_CastPyObjectToSBValue(PyObject *data) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
void *
|
|
|
|
|
lldb_private::LLDBSWIGPython_CastPyObjectToSBMemoryRegionInfo(PyObject *data) {
|
[lldb/Plugins] Add memory region support in ScriptedProcess
This patch adds support for memory regions in Scripted Processes.
This is necessary to read the stack memory region in order to
reconstruct each stackframe of the program.
In order to do so, this patch makes some changes to the SBAPI, namely:
- Add a new constructor for `SBMemoryRegionInfo` that takes arguments
such as the memory region name, address range, permissions ...
This is used when reading memory at some address to compute the offset
in the binary blob provided by the user.
- Add a `GetMemoryRegionContainingAddress` method to `SBMemoryRegionInfoList`
to simplify the access to a specific memory region.
With these changes, lldb is now able to unwind the stack and reconstruct
each frame. On top of that, reloading the target module at offset 0 allows
lldb to symbolicate the `ScriptedProcess` using debug info, similarly to an
ordinary Process.
To test this, I wrote a simple program with multiple function calls, ran it in
lldb, stopped at a leaf function and read the registers values and copied
the stack memory into a binary file. These are then used in the python script.
Differential Revision: https://reviews.llvm.org/D108953
Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
2021-10-08 12:25:04 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
lldb::ValueObjectSP
|
|
|
|
|
lldb_private::LLDBSWIGPython_GetValueObjectSPFromSBValue(void *data) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
bool lldb_private::LLDBSwigPython_UpdateSynthProviderInstance(
|
|
|
|
|
PyObject *implementor) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
bool lldb_private::LLDBSwigPython_MightHaveChildrenSynthProviderInstance(
|
|
|
|
|
PyObject *implementor) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
PyObject *lldb_private::LLDBSwigPython_GetValueSynthProviderInstance(
|
|
|
|
|
PyObject *implementor) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
bool lldb_private::LLDBSwigPythonCallCommand(
|
|
|
|
|
const char *python_function_name, const char *session_dictionary_name,
|
|
|
|
|
lldb::DebuggerSP &debugger, const char *args,
|
|
|
|
|
lldb_private::CommandReturnObject &cmd_retobj,
|
|
|
|
|
lldb::ExecutionContextRefSP exe_ctx_ref_sp) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
bool lldb_private::LLDBSwigPythonCallCommandObject(
|
|
|
|
|
PyObject *implementor, lldb::DebuggerSP &debugger, const char *args,
|
|
|
|
|
lldb_private::CommandReturnObject &cmd_retobj,
|
|
|
|
|
lldb::ExecutionContextRefSP exe_ctx_ref_sp) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
bool lldb_private::LLDBSwigPythonCallModuleInit(
|
|
|
|
|
const char *python_module_name, const char *session_dictionary_name,
|
|
|
|
|
lldb::DebuggerSP &debugger) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
void *
|
|
|
|
|
lldb_private::LLDBSWIGPythonCreateOSPlugin(const char *python_class_name,
|
|
|
|
|
const char *session_dictionary_name,
|
|
|
|
|
const lldb::ProcessSP &process_sp) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
void *lldb_private::LLDBSwigPythonCreateScriptedProcess(
|
2021-03-23 16:22:18 +00:00
|
|
|
const char *python_class_name, const char *session_dictionary_name,
|
2021-11-25 14:01:41 +01:00
|
|
|
const lldb::TargetSP &target_sp, const StructuredDataImpl &args_impl,
|
2021-03-23 16:22:18 +00:00
|
|
|
std::string &error_string) {
|
2021-10-06 00:09:20 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
void *lldb_private::LLDBSwigPythonCreateScriptedThread(
|
2021-10-06 00:09:20 +00:00
|
|
|
const char *python_class_name, const char *session_dictionary_name,
|
2021-11-25 14:01:41 +01:00
|
|
|
const lldb::ProcessSP &process_sp, const StructuredDataImpl &args_impl,
|
2021-10-19 23:30:22 +00:00
|
|
|
std::string &error_string) {
|
2021-03-23 16:22:18 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
void *lldb_private::LLDBSWIGPython_CreateFrameRecognizer(
|
|
|
|
|
const char *python_class_name, const char *session_dictionary_name) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
PyObject *lldb_private::LLDBSwigPython_GetRecognizedArguments(
|
|
|
|
|
PyObject *implementor, const lldb::StackFrameSP &frame_sp) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
bool lldb_private::LLDBSWIGPythonRunScriptKeywordProcess(
|
2019-03-26 01:11:15 +00:00
|
|
|
const char *python_function_name, const char *session_dictionary_name,
|
[lldb] Fix [some] leaks in python bindings
Using an lldb_private object in the bindings involves three steps
- wrapping the object in it's lldb::SB variant
- using swig to convert/wrap that to a PyObject
- wrapping *that* in a lldb_private::python::PythonObject
Our SBTypeToSWIGWrapper was only handling the middle part. This doesn't
just result in increased boilerplate in the callers, but is also a
functionality problem, as it's very hard to get the lifetime of of all
of these objects right. Most of the callers are creating the SB object
(step 1) on the stack, which means that we end up with dangling python
objects after the function terminates. Most of the time this isn't a
problem, because the python code does not need to persist the objects.
However, there are legitimate cases where they can do it (and even if
the use case is not completely legitimate, crashing is not the best
response to that).
For this reason, some of our code creates the SB object on the heap, but
it has another problem -- it never gets cleaned up.
This patch begins to add a new function (ToSWIGWrapper), which does all
of the three steps, while properly taking care of ownership. In the
first step, I have converted most of the leaky code (except for
SBStructuredData, which needs a bit more work).
Differential Revision: https://reviews.llvm.org/D114259
2021-11-18 21:27:27 +01:00
|
|
|
const lldb::ProcessSP &process, std::string &output) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
bool lldb_private::LLDBSWIGPythonRunScriptKeywordThread(
|
2019-03-26 01:11:15 +00:00
|
|
|
const char *python_function_name, const char *session_dictionary_name,
|
|
|
|
|
lldb::ThreadSP &thread, std::string &output) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
bool lldb_private::LLDBSWIGPythonRunScriptKeywordTarget(
|
2019-03-26 01:11:15 +00:00
|
|
|
const char *python_function_name, const char *session_dictionary_name,
|
[lldb] Fix [some] leaks in python bindings
Using an lldb_private object in the bindings involves three steps
- wrapping the object in it's lldb::SB variant
- using swig to convert/wrap that to a PyObject
- wrapping *that* in a lldb_private::python::PythonObject
Our SBTypeToSWIGWrapper was only handling the middle part. This doesn't
just result in increased boilerplate in the callers, but is also a
functionality problem, as it's very hard to get the lifetime of of all
of these objects right. Most of the callers are creating the SB object
(step 1) on the stack, which means that we end up with dangling python
objects after the function terminates. Most of the time this isn't a
problem, because the python code does not need to persist the objects.
However, there are legitimate cases where they can do it (and even if
the use case is not completely legitimate, crashing is not the best
response to that).
For this reason, some of our code creates the SB object on the heap, but
it has another problem -- it never gets cleaned up.
This patch begins to add a new function (ToSWIGWrapper), which does all
of the three steps, while properly taking care of ownership. In the
first step, I have converted most of the leaky code (except for
SBStructuredData, which needs a bit more work).
Differential Revision: https://reviews.llvm.org/D114259
2021-11-18 21:27:27 +01:00
|
|
|
const lldb::TargetSP &target, std::string &output) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
bool lldb_private::LLDBSWIGPythonRunScriptKeywordFrame(
|
2019-03-26 01:11:15 +00:00
|
|
|
const char *python_function_name, const char *session_dictionary_name,
|
|
|
|
|
lldb::StackFrameSP &frame, std::string &output) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
bool lldb_private::LLDBSWIGPythonRunScriptKeywordValue(
|
2019-03-26 01:11:15 +00:00
|
|
|
const char *python_function_name, const char *session_dictionary_name,
|
[lldb] Fix [some] leaks in python bindings
Using an lldb_private object in the bindings involves three steps
- wrapping the object in it's lldb::SB variant
- using swig to convert/wrap that to a PyObject
- wrapping *that* in a lldb_private::python::PythonObject
Our SBTypeToSWIGWrapper was only handling the middle part. This doesn't
just result in increased boilerplate in the callers, but is also a
functionality problem, as it's very hard to get the lifetime of of all
of these objects right. Most of the callers are creating the SB object
(step 1) on the stack, which means that we end up with dangling python
objects after the function terminates. Most of the time this isn't a
problem, because the python code does not need to persist the objects.
However, there are legitimate cases where they can do it (and even if
the use case is not completely legitimate, crashing is not the best
response to that).
For this reason, some of our code creates the SB object on the heap, but
it has another problem -- it never gets cleaned up.
This patch begins to add a new function (ToSWIGWrapper), which does all
of the three steps, while properly taking care of ownership. In the
first step, I have converted most of the leaky code (except for
SBStructuredData, which needs a bit more work).
Differential Revision: https://reviews.llvm.org/D114259
2021-11-18 21:27:27 +01:00
|
|
|
const lldb::ValueObjectSP &value, std::string &output) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
void *lldb_private::LLDBSWIGPython_GetDynamicSetting(
|
|
|
|
|
void *module, const char *setting, const lldb::TargetSP &target_sp) {
|
2019-03-26 01:11:15 +00:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
2020-09-28 10:28:29 -07:00
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
void *lldb_private::LLDBSwigPythonCreateScriptedStopHook(
|
2020-09-28 10:28:29 -07:00
|
|
|
lldb::TargetSP target_sp, const char *python_class_name,
|
2021-11-25 14:01:41 +01:00
|
|
|
const char *session_dictionary_name, const StructuredDataImpl &args_impl,
|
|
|
|
|
Status &error) {
|
2020-09-28 10:28:29 -07:00
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-22 16:32:44 +01:00
|
|
|
bool lldb_private::LLDBSwigPythonStopHookCallHandleStop(
|
|
|
|
|
void *implementor, lldb::ExecutionContextRefSP exc_ctx_sp,
|
|
|
|
|
lldb::StreamSP stream) {
|
2020-09-28 10:28:29 -07:00
|
|
|
return false;
|
|
|
|
|
}
|