[llvm-branch-commits] [lldb] d055e3a - [LLDB/Python] Fix segfault on Python scripted entrypoints
Pedro Tammela via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Dec 2 03:30:31 PST 2020
Author: Pedro Tammela
Date: 2020-12-02T11:25:31Z
New Revision: d055e3a0eb4e957159b075c0937a960beb75c975
URL: https://github.com/llvm/llvm-project/commit/d055e3a0eb4e957159b075c0937a960beb75c975
DIFF: https://github.com/llvm/llvm-project/commit/d055e3a0eb4e957159b075c0937a960beb75c975.diff
LOG: [LLDB/Python] Fix segfault on Python scripted entrypoints
The code that gets the ScriptInterpreter was not considering the
case that it receives a Lua interpreter.
Differential Revision: https://reviews.llvm.org/D92249
Added:
lldb/test/Shell/ScriptInterpreter/Python/scripted_breakpoint_lua.test
Modified:
lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
Removed:
################################################################################
diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
index e5802ad041e4..0d13884e8089 100644
--- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
+++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "lldb/Host/Config.h"
+#include "lldb/lldb-enumerations.h"
#if LLDB_ENABLE_PYTHON
@@ -214,6 +215,12 @@ extern "C" void *
LLDBSWIGPython_GetDynamicSetting(void *module, const char *setting,
const lldb::TargetSP &target_sp);
+static ScriptInterpreterPythonImpl *GetPythonInterpreter(Debugger &debugger) {
+ ScriptInterpreter *script_interpreter =
+ debugger.GetScriptInterpreter(true, lldb::eScriptLanguagePython);
+ return static_cast<ScriptInterpreterPythonImpl *>(script_interpreter);
+}
+
static bool g_initialized = false;
namespace {
@@ -1825,11 +1832,10 @@ StructuredData::ObjectSP ScriptInterpreterPythonImpl::CreateScriptedThreadPlan(
return {};
Debugger &debugger = thread_plan_sp->GetTarget().GetDebugger();
- ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter();
ScriptInterpreterPythonImpl *python_interpreter =
- static_cast<ScriptInterpreterPythonImpl *>(script_interpreter);
+ GetPythonInterpreter(debugger);
- if (!script_interpreter)
+ if (!python_interpreter)
return {};
void *ret_val;
@@ -1929,11 +1935,10 @@ ScriptInterpreterPythonImpl::CreateScriptedBreakpointResolver(
return StructuredData::GenericSP();
Debugger &debugger = bkpt_sp->GetTarget().GetDebugger();
- ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter();
ScriptInterpreterPythonImpl *python_interpreter =
- static_cast<ScriptInterpreterPythonImpl *>(script_interpreter);
+ GetPythonInterpreter(debugger);
- if (!script_interpreter)
+ if (!python_interpreter)
return StructuredData::GenericSP();
void *ret_val;
@@ -2003,11 +2008,10 @@ StructuredData::GenericSP ScriptInterpreterPythonImpl::CreateScriptedStopHook(
return StructuredData::GenericSP();
}
- ScriptInterpreter *script_interpreter = m_debugger.GetScriptInterpreter();
ScriptInterpreterPythonImpl *python_interpreter =
- static_cast<ScriptInterpreterPythonImpl *>(script_interpreter);
+ GetPythonInterpreter(m_debugger);
- if (!script_interpreter) {
+ if (!python_interpreter) {
error.SetErrorString("No script interpreter for scripted stop-hook.");
return StructuredData::GenericSP();
}
@@ -2103,11 +2107,10 @@ ScriptInterpreterPythonImpl::CreateSyntheticScriptedProvider(
return StructuredData::ObjectSP();
Debugger &debugger = target->GetDebugger();
- ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter();
ScriptInterpreterPythonImpl *python_interpreter =
- (ScriptInterpreterPythonImpl *)script_interpreter;
+ GetPythonInterpreter(debugger);
- if (!script_interpreter)
+ if (!python_interpreter)
return StructuredData::ObjectSP();
void *ret_val = nullptr;
@@ -2274,11 +2277,10 @@ bool ScriptInterpreterPythonImpl::BreakpointCallbackFunction(
return true;
Debugger &debugger = target->GetDebugger();
- ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter();
ScriptInterpreterPythonImpl *python_interpreter =
- (ScriptInterpreterPythonImpl *)script_interpreter;
+ GetPythonInterpreter(debugger);
- if (!script_interpreter)
+ if (!python_interpreter)
return true;
if (python_function_name && python_function_name[0]) {
@@ -2340,11 +2342,10 @@ bool ScriptInterpreterPythonImpl::WatchpointCallbackFunction(
return true;
Debugger &debugger = target->GetDebugger();
- ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter();
ScriptInterpreterPythonImpl *python_interpreter =
- (ScriptInterpreterPythonImpl *)script_interpreter;
+ GetPythonInterpreter(debugger);
- if (!script_interpreter)
+ if (!python_interpreter)
return true;
if (python_function_name && python_function_name[0]) {
diff --git a/lldb/test/Shell/ScriptInterpreter/Python/scripted_breakpoint_lua.test b/lldb/test/Shell/ScriptInterpreter/Python/scripted_breakpoint_lua.test
new file mode 100644
index 000000000000..c86ae9057c50
--- /dev/null
+++ b/lldb/test/Shell/ScriptInterpreter/Python/scripted_breakpoint_lua.test
@@ -0,0 +1,8 @@
+# REQUIRES: python
+# UNSUPPORTED: lldb-repro
+#
+# RUN: cat %s | %lldb --script-language lua 2>&1 | FileCheck %s
+b main
+breakpoint command add -s python -o 'print(frame); return False'
+run
+# CHECK: frame #0
More information about the llvm-branch-commits
mailing list