[Lldb-commits] [PATCH] D153735: [lldb][LocateModuleCallback] Implement API, Python interface
Kazuki Sakamoto via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Tue Jul 11 17:33:08 PDT 2023
splhack added a comment.
@clayborg yes, it'd be possible to pass the baton down to Platform.h since it is just `void *`, so no dependencies required.
But, first, let me explain the callback and baton flow.
----
For Python, user will set a callable Python object as the callback.
For C++ API, user will set a function pointer with a baton as the callback.
Both Python callback and C++ API callback will go into SBPlatform SetLocateModuleCallback.
SetLocateModuleCallback will use a lambda in order to convert ModuleSpec and FileSpec to SBModuleSpec and SBFileSpec.
This is because Platform.h and Target.cpp are not able to use SBModuleSpec and SBFileSpec.
| | | | | |
| user callback |<-----(SBModuleSpec, SBFileSpec)----->| SBPlatform lambda |<-----(ModuleSpec, FileSpec)---->| Platform |
| baton | | captures callback| | |
| | | baton | | |
This summary is what things are retained by which layer.
- Python
- the user callable object
- SBPlatform
- C++ API: the user callback and the baton
- Python: LLDBSwigPythonCallLocateModuleCallback and the user callable object as a baton
- Platform
- SBPlatform lambda in std::function
There are three things.
- SBPlatform lambda created by SetLocateModuleCallback, the type is Platform::LocateModuleCallback.
- The user callback or LLDBSwigPythonCallLocateModuleCallback, the type is SBPlatformLocateModuleCallback.
- The baton (for Python, this is the callable object)
----
And back to 'passing the baton down to Platform.h'.
As the locate callback implementation in D153734 <https://reviews.llvm.org/D153734> lldb/unittests/Target/LocateModuleCallbackTest.cpp,
internal users can use lambda to capture/retain anything for the callback. For example, `this` is captured by the locate callback in this case.
Therefore, no need to pass the baton down to Platform.h.
m_platform_sp->SetLocateModuleCallback([this](const ModuleSpec &module_spec,
FileSpec &module_file_spec,
FileSpec &symbol_file_spec) {
CheckCallbackArgs(module_spec, module_file_spec, symbol_file_spec);
symbol_file_spec.SetPath(GetInputFilePath(k_breakpad_symbol_file));
return Status();
});
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D153735/new/
https://reviews.llvm.org/D153735
More information about the lldb-commits
mailing list