[Lldb-commits] [lldb] r115926 - in /lldb/trunk: scripts/lldb.swig source/Interpreter/ScriptInterpreterPython.cpp tools/debugserver/debugserver.xcodeproj/project.pbxproj
Greg Clayton
gclayton at apple.com
Thu Oct 7 10:14:24 PDT 2010
Author: gclayton
Date: Thu Oct 7 12:14:24 2010
New Revision: 115926
URL: http://llvm.org/viewvc/llvm-project?rev=115926&view=rev
Log:
More SWIG cleanup. Moved the breakpoint callback function back to the
ScriptInterpreterPython class and made a simple callback function that
ScriptInterpreterPython::BreakpointCallbackFunction() now calls so we don't
include any internal API stuff into the cpp file that is generated by SWIG.
Fixed a few build warnings in debugserver.
Modified:
lldb/trunk/scripts/lldb.swig
lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
lldb/trunk/tools/debugserver/debugserver.xcodeproj/project.pbxproj
Modified: lldb/trunk/scripts/lldb.swig
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/lldb.swig?rev=115926&r1=115925&r2=115926&view=diff
==============================================================================
--- lldb/trunk/scripts/lldb.swig (original)
+++ lldb/trunk/scripts/lldb.swig Thu Oct 7 12:14:24 2010
@@ -94,14 +94,6 @@
#include "lldb/API/SBType.h"
#include "lldb/API/SBValue.h"
#include "lldb/API/SBValueList.h"
-#include "lldb/Interpreter/ScriptInterpreterPython.h"
-#include "lldb/Breakpoint/Breakpoint.h"
-#include "lldb/Breakpoint/BreakpointLocation.h"
-#include "lldb/Breakpoint/StoppointCallbackContext.h"
-#include "lldb/Target/ExecutionContext.h"
-#include "lldb/Target/StackFrame.h"
-#include "lldb/Target/Target.h"
-#include "lldb/Target/Thread.h"
%}
/* Various liblldb typedefs that SWIG needs to know about. */
@@ -151,96 +143,74 @@
%wrapper %{
+// This function is called by lldb_private::ScriptInterpreterPython::BreakpointCallbackFunction(...)
+// and is used when a script command is attached to a breakpoint for execution.
-bool
-lldb_private::ScriptInterpreterPython::BreakpointCallbackFunction
+SWIGEXPORT bool
+LLDBSWIGPythonBreakpointCallbackFunction
(
- void *baton,
- lldb_private::StoppointCallbackContext *context,
- lldb::user_id_t break_id,
- lldb::user_id_t break_loc_id
+ const char *python_function_name,
+ lldb::SBFrame& sb_frame,
+ lldb::SBBreakpointLocation& sb_bp_loc
)
{
- bool ret_value = true;
+ bool stop_at_breakpoint = true;
+ PyObject *Frame_PyObj = SWIG_NewPointerObj((void *) &sb_frame, SWIGTYPE_p_lldb__SBFrame, 0);
+ PyObject *Bp_Loc_PyObj = SWIG_NewPointerObj ((void *) &sb_bp_loc, SWIGTYPE_p_lldb__SBBreakpointLocation, 0);
- lldb_private::BreakpointOptions::CommandData *bp_option_data = (lldb_private::BreakpointOptions::CommandData *) baton;
- const char *python_function_name = bp_option_data->script_source.GetStringAtIndex (0);
+ if (Frame_PyObj == NULL || Bp_Loc_PyObj == NULL)
+ return stop_at_breakpoint;
+
+ PyObject *pmodule, *pdict, *pfunc;
+ PyObject *pargs, *pvalue;
- if (python_function_name != NULL
- && python_function_name[0] != '\0')
+ pmodule = PyImport_AddModule ("__main__");
+ if (pmodule != NULL)
{
- lldb_private::Thread *thread = context->exe_ctx.thread;
- lldb_private::Target *target = context->exe_ctx.target;
- const lldb::StackFrameSP stop_frame_sp = thread->GetStackFrameSPForStackFramePtr (context->exe_ctx.frame);
- lldb::BreakpointSP breakpoint_sp = target->GetBreakpointByID (break_id);
- const lldb::BreakpointLocationSP bp_loc_sp = breakpoint_sp->FindLocationByID (break_loc_id);
-
- lldb::SBFrame sb_frame (stop_frame_sp);
- lldb::SBBreakpointLocation sb_bp_loc (bp_loc_sp);
-
- if (!sb_bp_loc.IsValid() || !sb_frame.IsValid())
- return ret_value;
-
-
- PyObject *Frame_PyObj = SWIG_NewPointerObj((void *) &sb_frame, SWIGTYPE_p_lldb__SBFrame, 0);
- PyObject *Bp_Loc_PyObj = SWIG_NewPointerObj ((void *) &sb_bp_loc, SWIGTYPE_p_lldb__SBBreakpointLocation, 0);
-
- if (Frame_PyObj == NULL
- || Bp_Loc_PyObj == NULL)
- return ret_value;
-
- PyObject *pmodule, *pdict, *pfunc;
- PyObject *pargs, *pvalue;
-
- pmodule = PyImport_AddModule ("__main__");
- if (pmodule != NULL)
+ pdict = PyModule_GetDict (pmodule);
+ if (pdict != NULL)
{
- pdict = PyModule_GetDict (pmodule);
- if (pdict != NULL)
+ pfunc = PyObject_GetAttrString (pmodule, python_function_name);
+ if (pfunc && PyCallable_Check (pfunc))
{
- pfunc = PyObject_GetAttrString (pmodule, python_function_name);
- if (pfunc && PyCallable_Check (pfunc))
+ pargs = PyTuple_New (2);
+ if (pargs == NULL)
{
- pargs = PyTuple_New (2);
- if (pargs == NULL)
- {
- if (PyErr_Occurred())
- PyErr_Clear();
- return ret_value;
- }
-
- PyTuple_SetItem (pargs, 0, Frame_PyObj); // This "steals" a reference to Frame_PyObj
- PyTuple_SetItem (pargs, 1, Bp_Loc_PyObj); // This "steals" a reference to Bp_Loc_PyObj
- pvalue = PyObject_CallObject (pfunc, pargs);
- Py_DECREF (pargs);
-
- if (pvalue != NULL)
- {
- Py_DECREF (pvalue);
- }
- else if (PyErr_Occurred ())
- {
+ if (PyErr_Occurred())
PyErr_Clear();
- }
- Py_DECREF (pfunc);
+ return stop_at_breakpoint;
+ }
+
+ PyTuple_SetItem (pargs, 0, Frame_PyObj); // This "steals" a reference to Frame_PyObj
+ PyTuple_SetItem (pargs, 1, Bp_Loc_PyObj); // This "steals" a reference to Bp_Loc_PyObj
+ pvalue = PyObject_CallObject (pfunc, pargs);
+ Py_DECREF (pargs);
+
+ if (pvalue != NULL)
+ {
+ Py_DECREF (pvalue);
}
- else if (PyErr_Occurred())
+ else if (PyErr_Occurred ())
{
PyErr_Clear();
}
+ Py_DECREF (pfunc);
}
else if (PyErr_Occurred())
{
PyErr_Clear();
}
}
- else if (PyErr_Occurred ())
+ else if (PyErr_Occurred())
{
- PyErr_Clear ();
+ PyErr_Clear();
}
}
-
- return ret_value;
+ else if (PyErr_Occurred ())
+ {
+ PyErr_Clear ();
+ }
+ return stop_at_breakpoint;
}
%}
Modified: lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp?rev=115926&r1=115925&r2=115926&view=diff
==============================================================================
--- lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp (original)
+++ lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp Thu Oct 7 12:14:24 2010
@@ -22,6 +22,8 @@
#include <string>
+#include "lldb/API/SBFrame.h"
+#include "lldb/API/SBBreakpointLocation.h"
#include "lldb/Breakpoint/Breakpoint.h"
#include "lldb/Breakpoint/BreakpointLocation.h"
#include "lldb/Breakpoint/StoppointCallbackContext.h"
@@ -36,11 +38,20 @@
#include "lldb/Interpreter/CommandReturnObject.h"
#include "lldb/Core/Debugger.h"
#include "lldb/Target/Process.h"
+#include "lldb/Target/Thread.h"
// This function is in the C++ output file generated by SWIG after it is
// run on all of the headers in "lldb/API/SB*.h"
extern "C" void init_lldb (void);
+extern "C" bool
+LLDBSWIGPythonBreakpointCallbackFunction
+(
+ const char *python_function_name,
+ lldb::SBFrame& sb_frame,
+ lldb::SBBreakpointLocation& sb_bp_loc
+);
+
using namespace lldb;
using namespace lldb_private;
@@ -282,7 +293,7 @@
(
void *baton,
InputReader &reader,
- lldb::InputReaderAction notification,
+ InputReaderAction notification,
const char *bytes,
size_t bytes_len
)
@@ -565,7 +576,7 @@
(
void *baton,
InputReader &reader,
- lldb::InputReaderAction notification,
+ InputReaderAction notification,
const char *bytes,
size_t bytes_len
)
@@ -764,3 +775,34 @@
return true;
}
+bool
+ScriptInterpreterPython::BreakpointCallbackFunction
+(
+ void *baton,
+ StoppointCallbackContext *context,
+ user_id_t break_id,
+ user_id_t break_loc_id
+)
+{
+ BreakpointOptions::CommandData *bp_option_data = (BreakpointOptions::CommandData *) baton;
+ const char *python_function_name = bp_option_data->script_source.GetStringAtIndex (0);
+
+ if (python_function_name != NULL
+ && python_function_name[0] != '\0')
+ {
+ Thread *thread = context->exe_ctx.thread;
+ Target *target = context->exe_ctx.target;
+ const StackFrameSP stop_frame_sp = thread->GetStackFrameSPForStackFramePtr (context->exe_ctx.frame);
+ BreakpointSP breakpoint_sp = target->GetBreakpointByID (break_id);
+ const BreakpointLocationSP bp_loc_sp = breakpoint_sp->FindLocationByID (break_loc_id);
+
+ SBFrame sb_frame (stop_frame_sp);
+ SBBreakpointLocation sb_bp_loc (bp_loc_sp);
+
+ if (sb_bp_loc.IsValid() || sb_frame.IsValid())
+ return LLDBSWIGPythonBreakpointCallbackFunction (python_function_name, sb_frame, sb_bp_loc);
+ }
+ // We currently always true so we stop in case anything goes wrong when
+ // trying to call the script function
+ return true;
+}
Modified: lldb/trunk/tools/debugserver/debugserver.xcodeproj/project.pbxproj
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/debugserver/debugserver.xcodeproj/project.pbxproj?rev=115926&r1=115925&r2=115926&view=diff
==============================================================================
--- lldb/trunk/tools/debugserver/debugserver.xcodeproj/project.pbxproj (original)
+++ lldb/trunk/tools/debugserver/debugserver.xcodeproj/project.pbxproj Thu Oct 7 12:14:24 2010
@@ -457,7 +457,6 @@
);
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 113;
- FRAMEWORK_SEARCH_PATHS = $SDKROOT/System/Library/PrivateFrameworks;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
STRIP_INSTALLED_PRODUCT = NO;
@@ -477,7 +476,6 @@
);
CURRENT_PROJECT_VERSION = 113;
DEAD_CODE_STRIPPING = YES;
- FRAMEWORK_SEARCH_PATHS = $SDKROOT/System/Library/PrivateFrameworks;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
STRIPFLAGS = "-x";
@@ -498,7 +496,6 @@
);
CURRENT_PROJECT_VERSION = 113;
DEAD_CODE_STRIPPING = YES;
- FRAMEWORK_SEARCH_PATHS = $SDKROOT/System/Library/PrivateFrameworks;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
STRIPFLAGS = "-x";
@@ -512,7 +509,6 @@
262419A21198A93E00067686 /* BuildAndIntegration */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
"CODE_SIGN_ENTITLEMENTS[sdk=iphoneos*]" = "source/debugserver-entitlements.plist";
COPY_PHASE_STRIP = YES;
CURRENT_PROJECT_VERSION = 113;
@@ -553,7 +549,6 @@
26CE0596115C31C30022F371 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
"CODE_SIGN_ENTITLEMENTS[sdk=iphoneos*]" = "source/debugserver-entitlements.plist";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = lldb_codesign;
COPY_PHASE_STRIP = YES;
@@ -595,7 +590,6 @@
26CE0597115C31C30022F371 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
"CODE_SIGN_ENTITLEMENTS[sdk=iphoneos*]" = "source/debugserver-entitlements.plist";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = lldb_codesign;
COPY_PHASE_STRIP = YES;
More information about the lldb-commits
mailing list