summaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
AgeCommit message (Collapse)Author
2021-07-09[lldb] Add the ability to silently import scripted commandsJonas Devlieghere
Add the ability to silence command script import. The motivation for this change is being able to add command script import -s lldb.macosx.crashlog to your ~/.lldbinit without it printing the following message at the beginning of every debug session. "malloc_info", "ptr_refs", "cstr_refs", "find_variable", and "objc_refs" commands have been installed, use the "--help" options on these commands for detailed help. In addition to forwarding the silent option to LoadScriptingModule, this also changes ScriptInterpreterPythonImpl::ExecuteOneLineWithReturn and ScriptInterpreterPythonImpl::ExecuteMultipleLines to honor the enable IO option in ExecuteScriptOptions, which until now was ignored. Note that IO is only enabled (or disabled) at the start of a session, and for this particular use case, that's done when taking the Python lock in LoadScriptingModule, which means that the changes to these two functions are not strictly necessary, but (IMO) desirable nonetheless. Differential revision: https://reviews.llvm.org/D105327
2021-07-02[lldb] Replace default bodies of special member functions with = default;Jonas Devlieghere
Replace default bodies of special member functions with = default; $ run-clang-tidy.py -header-filter='lldb' -checks='-*,modernize-use-equals-default' -fix , https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-equals-default.html Differential revision: https://reviews.llvm.org/D104041
2021-06-15Convert functions that were returning BreakpointOption * to BreakpointOption &.Jim Ingham
This is an NFC cleanup. Many of the API's that returned BreakpointOptions always returned valid ones. Internally the BreakpointLocations usually have null BreakpointOptions, since they use their owner's options until an option is set specifically on the location. So the original code used pointers & unique_ptr everywhere for consistency. But that made the code hard to reason about from the outside. This patch changes the code so that everywhere an API is guaranteed to return a non-null BreakpointOption, it returns it as a reference to make that clear. It also changes the Breakpoint to hold a BreakpointOption member where it previously had a UP. Since we were always filling the UP in the Breakpoint constructor, having the UP wasn't helping anything. Differential Revision: https://reviews.llvm.org/D104162
2021-06-09[lldb] Use C++11 default member initializersJonas Devlieghere
This converts a default constructor's member initializers into C++11 default member initializers. This patch was automatically generated with clang-tidy and the modernize-use-default-member-init check. $ run-clang-tidy.py -header-filter='lldb' -checks='-*,modernize-use-default-member-init' -fix This is a mass-refactoring patch and this commit will be added to .git-blame-ignore-revs. Differential revision: https://reviews.llvm.org/D103483
2021-05-26[lldb][NFC] Use C++ versions of the deprecated C standard library headersRaphael Isemann
The C headers are deprecated so as requested in D102845, this is replacing them all with their (not deprecated) C++ equivalent. Reviewed By: shafik Differential Revision: https://reviews.llvm.org/D103084
2021-03-23[lldb/Interpreter] Add ScriptInterpreter Wrapper for ScriptedProcessMed Ismail Bennani
This patch adds a ScriptedProcess interface to the ScriptInterpreter and more specifically, to the ScriptInterpreterPython. This interface will be used in the C++ `ScriptProcess` Process Plugin to call the script methods. At the moment, not all methods are implemented, they will upstreamed in upcoming patches. This patch also adds helper methods to the ScriptInterpreter to convert `SBAPI` Types (SBData & SBError) to `lldb_private` types (DataExtractor & Status). rdar://65508855 Differential Revision: https://reviews.llvm.org/D95711 Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
2021-03-09[lldb] Fix a bug in D96779 (shared lib directory logic)Pavel Labath
This function would fail in debug builds, as the two usages of the LLDB_PYTHON_RELATIVE_LIBDIR macro would expand to two distinct strings. The path iterator macros don't support that. Use a temporary variable to ensure everything points to a single string.
2021-03-01[lldb] Revert ScriptedProcess patchesMed Ismail Bennani
This patch reverts the following commits: - 5a9c34918bb1526b7e8c29aa5e4fb8d8e27e27b4 - 46796762afe76496ec4dd900f64d0cf4cdc30e99 - 2cff3dec1171188ce04ab1a4373cc1885ab97be1 - 182f0d1a34419445bb19d67581d6ac1afc98b7fa - d62a53aaf1d38a55d1affbd3a30d564a4e9d3171 Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
2021-03-01[lldb/Interpreter] Add ScriptInterpreter Wrapper for ScriptedProcessMed Ismail Bennani
This patch adds a ScriptedProcess interface to the ScriptInterpreter and more specifically, to the ScriptInterpreterPython. This interface will be used in the C++ `ScriptProcess` Process Plugin to call the script methods. At the moment, not all methods are implemented, they will upstreamed in upcoming patches. This patch also adds helper methods to the ScriptInterpreter to convert `SBAPI` Types (SBData & SBError) to `lldb_private` types (DataExtractor & Status). rdar://65508855 Differential Revision: https://reviews.llvm.org/D95711 Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
2021-02-18[lldb] Remove unused code in ScriptInterpreterPythonJonas Devlieghere
Remove the unused code I noticed when working on d6e80578fc5e and do some other minor cleanups in the vicinity.
2021-02-18[lldb] Fix shared library directory computation on windowsPavel Labath
Our code for locating the shared library directory works via dladdr (or the windows equivalent) to locate the path of an address known to reside in liblldb. This works great for C++ programs, but there's a catch. When (lib)lldb is used from python (like in our test suite), this dladdr call will return a path to the _lldb.so (or such) file in the python directory. To compensate for this, we have code which attempts to resolve this symlink, to ensure we get the canonical location. However, here's the second catch. On windows, this file is not a symlink (but a copy), so this logic fails. Since most of our other paths are derived from the liblldb location, all of these paths will be wrong, when running the test suite. One effect of this was the failure to find lldb-server in D96202. To fix this issue, I add some windows-specific code to locate the liblldb directory. Since it cannot rely on symlinks, it works by manually walking the directory tree -- essentially doing the opposite of what we do when computing the python directory. To avoid python leaking back into the host code, I implement this with the help of a callback which can be passed to HostInfo::Initialize in order to assist with the directory location. The callback lives inside the python plugin. I also strenghten the existing path test to ensure the returned path is the right one. Differential Revision: https://reviews.llvm.org/D96779
2021-02-17[lldb] Improve error message for modules with dots or dashesJonas Devlieghere
LLDB does not like to import Python files with dashes or dots in their name. While the former are technically allowed, it is discouraged. Dots are allowed for subpackages but not in module names. This patch improves the user experience by printing a useful error. Before this patch: error: module importing failed: SyntaxError('invalid syntax', ('<string>', 1, 11, 'import foo-bar\n')) After this patch: error: module importing failed: Python discourages dashes in module names: foo-bar rdar://74263511 [1] https://www.python.org/dev/peps/pep-0008/#package-and-module-names Differential revision: https://reviews.llvm.org/D96833
2020-12-22[lldb] Abstract scoped timer logic behind LLDB_SCOPED_TIMER (NFC)Jonas Devlieghere
This patch introduces a LLDB_SCOPED_TIMER macro to hide the needlessly repetitive creation of scoped timers in LLDB. It's similar to the LLDB_LOG(F) macro. Differential revision: https://reviews.llvm.org/D93663
2020-12-09[lldb] Track the API boundary using a thread_local variable.Jonas Devlieghere
The reproducers currently use a static variable to track the API boundary. This is obviously incorrect when the SB API is used concurrently. While I do not plan to support that use-case (right now), I do want to avoid us crashing. As a first step, correctly track API boundaries across multiple threads. Before this patch SB API calls made by the embedded script interpreter would be considered "behind the API boundary" and correctly ignored. After this patch, we need to tell the reproducers to ignore the scripting thread as a "private thread". Differential revision: https://reviews.llvm.org/D92811
2020-12-02[LLDB/Python] Fix segfault on Python scripted entrypointsPedro Tammela
The code that gets the ScriptInterpreter was not considering the case that it receives a Lua interpreter. Differential Revision: https://reviews.llvm.org/D92249
2020-10-27[lldb] Support Python imports relative the to the current file being sourcedJonas Devlieghere
Make it possible to use a relative path in command script import to the location of the file being sourced. This allows the user to put Python scripts next to LLDB command files and importing them without having to specify an absolute path. To enable this behavior pass `-c` to `command script import`. The argument can only be used when sourcing the command from a file. rdar://68310384 Differential revision: https://reviews.llvm.org/D89334
2020-10-13[lldb] Remove lexical block and fix formatting LoadScriptingModule (NFC)Jonas Devlieghere
2020-10-13[lldb] Unconditionally strip the `.py(c)` extension when loading a moduleJonas Devlieghere
Currently we only strip the Python extension when the file exists on disk because we assumed that if it didn't exist it was a module. However, with the change from D89334 this is no longer the case as we want to be able to import a relative path to a .py as a module. Since we always import a scripting module as a "python module" we should always strip the extension if present. Differential revision: https://reviews.llvm.org/D89352
2020-09-29Revert "Revert "Add the ability to write target stop-hooks using the ↵Jim Ingham
ScriptInterpreter."" This reverts commit f775fe59640a2e837ad059a8f40e26989d4f9831. I fixed a return type error in the original patch that was causing a test failure. Also added a REQUIRES: python to the shell test so we'll skip this for people who build lldb w/o Python. Also added another test for the error printing.
2020-09-28Revert "Add the ability to write target stop-hooks using the ScriptInterpreter."Jonas Devlieghere
This temporarily reverts commit b65966cff65bfb66de59621347ffd97238d3f645 while Jim figures out why the test is failing on the bots.
2020-09-25Add the ability to write target stop-hooks using the ScriptInterpreter.Jim Ingham
Differential Revision: https://reviews.llvm.org/D88123
2020-06-25[lldb/ScriptInterpreter] Fix missing include on WindowsJonas Devlieghere
2020-06-25[lldb/ScriptInterpreter] Let the IORedirect factory handle IO being disabled.Jonas Devlieghere
Have one factory method that decides how to initialize the ScriptInterpreterIORedirect object based on whether IO is enabled or disabled.
2020-06-25[lldb/ScriptInterpreter] Extract IO redirection logicJonas Devlieghere
This patch takes the IO redirection logic from ScriptInterpreterPython and moves it into the interpreter library so that it can be used by other script interpreters. I've turned it into a RAII object so that we don't have to worry about cleaning up in the calling code. Differential revision: https://reviews.llvm.org/D82396
2020-06-15[lldb/Python] Various cleanups in ScriptInterpreterPython (NFC)Jonas Devlieghere
2020-06-15[lldb] Rename Master/Slave to Primary/Secondary (NFC)Jonas Devlieghere
2020-05-08Re-land "get rid of PythonInteger::GetInteger()"Lawrence D'Anna
This was reverted due to a python2-specific bug. Re-landing with a fix for python2. Summary: One small step in my long running quest to improve python exception handling in LLDB. Replace GetInteger() which just returns an int with As<long long> and friends, which return Expected types that can track python exceptions Reviewers: labath, jasonmolenda, JDevlieghere, vadimcn, omjavaid Reviewed By: labath, omjavaid Subscribers: omjavaid, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D78462
2020-04-23Revert "get rid of PythonInteger::GetInteger()"Muhammad Omair Javaid
This reverts commit 7375212172951d2fc283c81d03c1a8588c3280c6. This causes multiple test failures on LLDB AArch64 Linux buildbot. http://lab.llvm.org:8011/builders/lldb-aarch64-ubuntu/builds/3695 Differential Revision: https://reviews.llvm.org/D78462
2020-04-21get rid of PythonInteger::GetInteger()Lawrence D'Anna
Summary: One small step in my long running quest to improve python exception handling in LLDB. Replace GetInteger() which just returns an int with As<long long> and friends, which return Expected types that can track python exceptions Reviewers: labath, jasonmolenda, JDevlieghere, vadimcn Reviewed By: labath Subscribers: lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D78462
2020-04-07[ScriptInterpreterPython] Remove buggy code to save/restore stdin.Davide Italiano
Discussed on lldb-dev with Pavel Labath. This doesn't work for background processes [causes Python to be stuck forever], and it's unclear whether it's needed. There's no test, also. If this turns out to be useful, it can be recommitted with a functional implementation and a test.
2020-04-02[lldb] Change Communication::SetConnection to take a unique_ptrPavel Labath
The function takes ownership of the object. This makes that explicit, and avoids unowned pointers floating around.
2020-03-24[lldb/Reproducers] Collect files imported by command script importJonas Devlieghere
Files imported by the script interpreter aren't opened by LLDB so they don't end up in the reproducer. The solution is to explicitly add them to the FileCollector. Differential revision: https://reviews.llvm.org/D76626
2020-02-21Allow customized relative PYTHONHOME (Attemp 1)Haibo Huang
Summary: This is another attempt of 0bb90628b5f7c170689d2d3f019af773772fc649. The difference is that g_python_home is not declared as const. Since some versions of python do not expect that. Subscribers: mgorny, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D74998
2020-02-21Revert "Allow customized relative PYTHONHOME"Stella Stamenova
This reverts commit 0bb90628b5f7c170689d2d3f019af773772fc649 since it is causing failures on the Windows LLDB buildbot: http://lab.llvm.org:8011/builders/lldb-x64-windows-ninja/builds/14048
2020-02-21Allow customized relative PYTHONHOMEHaibo Huang
Summary: This change allows a hard coded relative PYTHONHOME setting. So that python can easily be packaged together with lldb. The change includes: 1. Extend LLDB_RELOCATABLE_PYTHON to all platforms. It defaults to ON for platforms other than Windows, to keep the behavior compatible. 2. Allows to customize LLDB_PYTHON_HOME. But still defaults to PYTHON_HOME. 3. LLDB_PYTHON_HOME can be a path relative to liblldb. If it is relative, we will resolve it before send it to Py_DecodeLocale. Subscribers: mgorny, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D74727
2020-02-14[lldb/Plugin] s/LLDB_PLUGIN/LLDB_PLUGIN_DEFINE/ (NFC)Jonas Devlieghere
Rename LLDB_PLUGIN to LLDB_PLUGIN_DEFINE as Pavel suggested in D73067 to avoid name conflict.
2020-02-10[LLDB] Fix GCC warnings about extra semicolons. NFC.Martin Storsjö
2020-02-07[lldb/Plugins] Use external functions to (de)initialize pluginsJonas Devlieghere
This is a step towards making the initialize and terminate calls be generated by CMake, which in turn is towards making it possible to disable plugins at configuration time. Differential revision: https://reviews.llvm.org/D74245
2020-01-28Make llvm::StringRef to std::string conversions explicit.Benjamin Kramer
This is how it should've been and brings it more in line with std::string_view. There should be no functional change here. This is mostly mechanical from a custom clang-tidy check, with a lot of manual fixups. It uncovers a lot of minor inefficiencies. This doesn't actually modify StringRef yet, I'll do that in a follow-up.
2020-01-24[lldb][NFC] Fix all formatting errors in .cpp file headersRaphael Isemann
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-15[lldb/Debugger] Rename IO handler methods to be more meaningful (NFC)Jonas Devlieghere
Make it clear form the method names whether they are synchronous or asynchronous.
2020-01-14[lldb/CommandInterpreter] Remove flag that's always true (NFC)Jonas Devlieghere
The 'asynchronously' argument to both GetLLDBCommandsFromIOHandler and GetPythonCommandsFromIOHandler is true for all call sites. This commit simplifies the API by dropping it and giving the baton a default argument.
2019-12-22[lldb/ScriptInterpreter] Remove can_reload which is always true (NFC)Jonas Devlieghere
The `-r` option for `command script import` is there for legacy compatibility, however the can_reload flag is always set to true. This patch removes the flag and any code that relies on it being false.
2019-12-13[lldb/CMake] Rename LLDB_DISABLE_PYTHON to LLDB_ENABLE_PYTHONJonas Devlieghere
This matches the naming scheme used by LLVM and all the other optional dependencies in LLDB. Differential revision: https://reviews.llvm.org/D71482
2019-12-10[lldb/Host] Use Host/Config.h entries instead of a global define.Jonas Devlieghere
As suggested by Pavel in a code review: > Can we replace this (and maybe python too, while at it) with a > Host/Config.h entry? A global definition means that one has to > recompile everything when these change in any way, whereas in > practice only a handful of files need this.. Differential revision: https://reviews.llvm.org/D71280
2019-12-03[LLDB] Disable MSVC warning C4190: ↵Alexandre Ganea
'LLDBSwigPythonBreakpointCallbackFunction' has C-linkage specified, but returns UDT 'llvm::Expected<bool>' which is incompatible with C Differential Revision: https://reviews.llvm.org/D70830
2019-11-12[lldb] Fix some warnings in the python pluginPavel Labath
2019-11-05Revert and patch "[Python] Remove readline module"serge-sans-paille
Fix https://bugs.llvm.org/show_bug.cgi?id=43830 while avoiding polluting the global Python namespace. This both reverts r357277 to rebundle a version of Python's readline module based on libedit. However, this patch also provides two improvements over the previous implementation: 1. use PyMem_RawMalloc instead of PyMem_Malloc, as expected by PyOS_Readline (prevents to segfault upon exit of interactive session) 2. patch the readline module upon embedded interpreter loading, instead of patching it globally, which should prevent any side effect on other modules/packages 3. only activate the patched module if libedit is actually linked in lldb Differential Revision: https://reviews.llvm.org/D69793
2019-11-04[LLDB][Python] remove ArgInfo::countLawrence D'Anna
Summary: This patch updates the last user of ArgInfo::count and deletes it. I also delete `GetNumInitArguments()` and `GetInitArgInfo()`. Classess are callables and `GetArgInfo()` should work on them. On python 3 it already works, of course. `inspect` is good. On python 2 we have to add yet another special case. But hey if python 2 wasn't crufty we wouln't need python 3. I also delete `is_bound_method` becuase it is unused. This path is tested in `TestStepScripted.py` Reviewers: labath, mgorny, JDevlieghere Reviewed By: labath, JDevlieghere Subscribers: lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D69742
2019-10-29[LLDB][breakpoints] ArgInfo::count -> ArgInfo::max_positional_argsLawrence D'Anna
Summary: Move breakpoints from the old, bad ArgInfo::count to the new, better ArgInfo::max_positional_args. Soon ArgInfo::count will be no more. It looks like this functionality is already well tested by `TestBreakpointCommandsFromPython.py`, so there's no need to write additional tests for it. Reviewers: labath, jingham, JDevlieghere Reviewed By: labath Subscribers: lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D69468