forked from OSchip/llvm-project
[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
This commit is contained in:
parent
137a25f04a
commit
d055e3a0eb
|
@ -7,6 +7,7 @@
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "lldb/Host/Config.h"
|
#include "lldb/Host/Config.h"
|
||||||
|
#include "lldb/lldb-enumerations.h"
|
||||||
|
|
||||||
#if LLDB_ENABLE_PYTHON
|
#if LLDB_ENABLE_PYTHON
|
||||||
|
|
||||||
|
@ -214,6 +215,12 @@ extern "C" void *
|
||||||
LLDBSWIGPython_GetDynamicSetting(void *module, const char *setting,
|
LLDBSWIGPython_GetDynamicSetting(void *module, const char *setting,
|
||||||
const lldb::TargetSP &target_sp);
|
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;
|
static bool g_initialized = false;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -1825,11 +1832,10 @@ StructuredData::ObjectSP ScriptInterpreterPythonImpl::CreateScriptedThreadPlan(
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
Debugger &debugger = thread_plan_sp->GetTarget().GetDebugger();
|
Debugger &debugger = thread_plan_sp->GetTarget().GetDebugger();
|
||||||
ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter();
|
|
||||||
ScriptInterpreterPythonImpl *python_interpreter =
|
ScriptInterpreterPythonImpl *python_interpreter =
|
||||||
static_cast<ScriptInterpreterPythonImpl *>(script_interpreter);
|
GetPythonInterpreter(debugger);
|
||||||
|
|
||||||
if (!script_interpreter)
|
if (!python_interpreter)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
void *ret_val;
|
void *ret_val;
|
||||||
|
@ -1929,11 +1935,10 @@ ScriptInterpreterPythonImpl::CreateScriptedBreakpointResolver(
|
||||||
return StructuredData::GenericSP();
|
return StructuredData::GenericSP();
|
||||||
|
|
||||||
Debugger &debugger = bkpt_sp->GetTarget().GetDebugger();
|
Debugger &debugger = bkpt_sp->GetTarget().GetDebugger();
|
||||||
ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter();
|
|
||||||
ScriptInterpreterPythonImpl *python_interpreter =
|
ScriptInterpreterPythonImpl *python_interpreter =
|
||||||
static_cast<ScriptInterpreterPythonImpl *>(script_interpreter);
|
GetPythonInterpreter(debugger);
|
||||||
|
|
||||||
if (!script_interpreter)
|
if (!python_interpreter)
|
||||||
return StructuredData::GenericSP();
|
return StructuredData::GenericSP();
|
||||||
|
|
||||||
void *ret_val;
|
void *ret_val;
|
||||||
|
@ -2003,11 +2008,10 @@ StructuredData::GenericSP ScriptInterpreterPythonImpl::CreateScriptedStopHook(
|
||||||
return StructuredData::GenericSP();
|
return StructuredData::GenericSP();
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptInterpreter *script_interpreter = m_debugger.GetScriptInterpreter();
|
|
||||||
ScriptInterpreterPythonImpl *python_interpreter =
|
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.");
|
error.SetErrorString("No script interpreter for scripted stop-hook.");
|
||||||
return StructuredData::GenericSP();
|
return StructuredData::GenericSP();
|
||||||
}
|
}
|
||||||
|
@ -2103,11 +2107,10 @@ ScriptInterpreterPythonImpl::CreateSyntheticScriptedProvider(
|
||||||
return StructuredData::ObjectSP();
|
return StructuredData::ObjectSP();
|
||||||
|
|
||||||
Debugger &debugger = target->GetDebugger();
|
Debugger &debugger = target->GetDebugger();
|
||||||
ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter();
|
|
||||||
ScriptInterpreterPythonImpl *python_interpreter =
|
ScriptInterpreterPythonImpl *python_interpreter =
|
||||||
(ScriptInterpreterPythonImpl *)script_interpreter;
|
GetPythonInterpreter(debugger);
|
||||||
|
|
||||||
if (!script_interpreter)
|
if (!python_interpreter)
|
||||||
return StructuredData::ObjectSP();
|
return StructuredData::ObjectSP();
|
||||||
|
|
||||||
void *ret_val = nullptr;
|
void *ret_val = nullptr;
|
||||||
|
@ -2274,11 +2277,10 @@ bool ScriptInterpreterPythonImpl::BreakpointCallbackFunction(
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
Debugger &debugger = target->GetDebugger();
|
Debugger &debugger = target->GetDebugger();
|
||||||
ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter();
|
|
||||||
ScriptInterpreterPythonImpl *python_interpreter =
|
ScriptInterpreterPythonImpl *python_interpreter =
|
||||||
(ScriptInterpreterPythonImpl *)script_interpreter;
|
GetPythonInterpreter(debugger);
|
||||||
|
|
||||||
if (!script_interpreter)
|
if (!python_interpreter)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (python_function_name && python_function_name[0]) {
|
if (python_function_name && python_function_name[0]) {
|
||||||
|
@ -2340,11 +2342,10 @@ bool ScriptInterpreterPythonImpl::WatchpointCallbackFunction(
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
Debugger &debugger = target->GetDebugger();
|
Debugger &debugger = target->GetDebugger();
|
||||||
ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter();
|
|
||||||
ScriptInterpreterPythonImpl *python_interpreter =
|
ScriptInterpreterPythonImpl *python_interpreter =
|
||||||
(ScriptInterpreterPythonImpl *)script_interpreter;
|
GetPythonInterpreter(debugger);
|
||||||
|
|
||||||
if (!script_interpreter)
|
if (!python_interpreter)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (python_function_name && python_function_name[0]) {
|
if (python_function_name && python_function_name[0]) {
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue