7eb10c8dbe
* Sat Aug 21 2010 David Malcolm <dmalcolm@redhat.com> - 3.2-0.0.a1 - 3.2a1; add alphatag - rework %%files in the light of PEP 3147 (__pycache__) - drop our configuration patch to Setup.dist (patch 0): setup.py should do a better job of things, and the %%files explicitly lists our modules (r82746 appears to break the old way of doing things). This leads to various modules changing from "foomodule.so" to "foo.so". It also leads to the optimized build dropping the _sha1, _sha256 and _sha512 modules, but these are provided by _hashlib; _weakref becomes a builtin module; xxsubtype goes away (it's only for testing/devel purposes) - fixup patches 3, 4, 6, 8, 102, 103, 105, 111 for the rebase - remove upstream patches: 7 (system expat), 106, 107, 108 (audioop reformat plus CVE-2010-1634 and CVE-2010-2089), 109 (CVE-2008-5983) - add machinery for rebuilding "configure" and friends, using the correct version of autoconf (patch 300) - patch the debug build's usage of COUNT_ALLOCS to be less verbose (patch 125) - "modulator" was removed upstream - drop "-b" from patch applications affecting .py files to avoid littering the installation tree
223 lines
6.6 KiB
Diff
223 lines
6.6 KiB
Diff
diff -up Python-3.2a1/configure.in.systemtap Python-3.2a1/configure.in
|
|
--- Python-3.2a1/configure.in.systemtap 2010-07-19 03:31:40.000000000 -0400
|
|
+++ Python-3.2a1/configure.in 2010-08-02 16:19:43.809000621 -0400
|
|
@@ -1987,6 +1987,7 @@ AC_ARG_WITH(system_expat,
|
|
AC_MSG_RESULT($with_system_expat)
|
|
|
|
# Check for use of the system libffi library
|
|
+
|
|
AC_MSG_CHECKING(for --with-system-ffi)
|
|
AC_ARG_WITH(system_ffi,
|
|
AS_HELP_STRING([--with-system-ffi], [build _ctypes module using an installed ffi library]))
|
|
@@ -2500,6 +2501,38 @@ if test "$with_valgrind" != no; then
|
|
OPT="-DDYNAMIC_ANNOTATIONS_ENABLED=1 $OPT"
|
|
fi
|
|
|
|
+# Check for dtrace support
|
|
+AC_MSG_CHECKING(for --with-dtrace)
|
|
+AC_ARG_WITH(dtrace,
|
|
+ AC_HELP_STRING(--with(out)-dtrace, disable/enable dtrace support))
|
|
+
|
|
+if test ! -z "$with_dtrace"
|
|
+then
|
|
+ if dtrace -G -o /dev/null -s $srcdir/Include/pydtrace.d 2>/dev/null
|
|
+ then
|
|
+ AC_DEFINE(WITH_DTRACE, 1,
|
|
+ [Define if you want to compile in Dtrace support])
|
|
+ with_dtrace="Sun"
|
|
+ DTRACEOBJS="Python/dtrace.o"
|
|
+ DTRADEHDRS=""
|
|
+ elif dtrace -h -o /dev/null -s $srcdir/Include/pydtrace.d
|
|
+ then
|
|
+ AC_DEFINE(WITH_DTRACE, 1,
|
|
+ [Define if you want to compile in Dtrace support])
|
|
+ with_dtrace="Apple"
|
|
+ DTRACEOBJS=""
|
|
+ DTRADEHDRS="pydtrace.h"
|
|
+ else
|
|
+ with_dtrace="no"
|
|
+ fi
|
|
+else
|
|
+ with_dtrace="no"
|
|
+fi
|
|
+
|
|
+AC_MSG_RESULT($with_dtrace)
|
|
+AC_SUBST(DTRACEOBJS)
|
|
+AC_SUBST(DTRACEHDRS)
|
|
+
|
|
# Check for --with-wctype-functions
|
|
AC_MSG_CHECKING(for --with-wctype-functions)
|
|
AC_ARG_WITH(wctype-functions,
|
|
diff -up Python-3.2a1/Include/pydtrace.d.systemtap Python-3.2a1/Include/pydtrace.d
|
|
--- Python-3.2a1/Include/pydtrace.d.systemtap 2010-08-02 16:17:04.249000540 -0400
|
|
+++ Python-3.2a1/Include/pydtrace.d 2010-08-02 16:17:04.249000540 -0400
|
|
@@ -0,0 +1,10 @@
|
|
+provider python {
|
|
+ probe function__entry(const char *, const char *, int);
|
|
+ probe function__return(const char *, const char *, int);
|
|
+};
|
|
+
|
|
+#pragma D attributes Evolving/Evolving/Common provider python provider
|
|
+#pragma D attributes Private/Private/Common provider python module
|
|
+#pragma D attributes Private/Private/Common provider python function
|
|
+#pragma D attributes Evolving/Evolving/Common provider python name
|
|
+#pragma D attributes Evolving/Evolving/Common provider python args
|
|
diff -up Python-3.2a1/Makefile.pre.in.systemtap Python-3.2a1/Makefile.pre.in
|
|
--- Python-3.2a1/Makefile.pre.in.systemtap 2010-08-02 16:17:04.243000614 -0400
|
|
+++ Python-3.2a1/Makefile.pre.in 2010-08-02 16:20:41.617000527 -0400
|
|
@@ -324,6 +324,7 @@ PYTHON_OBJS= \
|
|
Python/dtoa.o \
|
|
Python/formatter_unicode.o \
|
|
Python/$(DYNLOADFILE) \
|
|
+ @DTRACEOBJS@ \
|
|
$(LIBOBJS) \
|
|
$(MACHDEP_OBJS) \
|
|
$(THREADOBJ)
|
|
@@ -615,6 +616,18 @@ Python/formatter_unicode.o: $(srcdir)/Py
|
|
$(srcdir)/Objects/stringlib/formatter.h
|
|
|
|
|
|
+# Only needed with --with-dtrace
|
|
+buildinclude:
|
|
+ mkdir -p Include
|
|
+
|
|
+Include/pydtrace.h: buildinclude $(srcdir)/Include/pydtrace.d
|
|
+ dtrace -o $@ $(DFLAGS) -C -h -s $(srcdir)/Include/pydtrace.d
|
|
+
|
|
+Python/ceval.o: Include/pydtrace.h
|
|
+
|
|
+Python/dtrace.o: buildinclude $(srcdir)/Include/pydtrace.d Python/ceval.o
|
|
+ dtrace -o $@ $(DFLAGS) -C -G -s $(srcdir)/Include/pydtrace.d Python/ceval.o
|
|
+
|
|
############################################################################
|
|
# Header files
|
|
|
|
@@ -1248,7 +1261,7 @@ Python/thread.o: @THREADHEADERS@
|
|
.PHONY: frameworkinstall frameworkinstallframework frameworkinstallstructure
|
|
.PHONY: frameworkinstallmaclib frameworkinstallapps frameworkinstallunixtools
|
|
.PHONY: frameworkaltinstallunixtools recheck autoconf clean clobber distclean
|
|
-.PHONY: smelly funny patchcheck
|
|
+.PHONY: smelly funny patchcheck buildinclude
|
|
.PHONY: gdbhooks
|
|
|
|
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
|
|
diff -up Python-3.2a1/pyconfig.h.in.systemtap Python-3.2a1/pyconfig.h.in
|
|
--- Python-3.2a1/pyconfig.h.in.systemtap 2010-08-02 16:18:33.696001964 -0400
|
|
+++ Python-3.2a1/pyconfig.h.in 2010-08-02 16:21:48.566001832 -0400
|
|
@@ -1078,6 +1078,9 @@
|
|
/* Define if you want documentation strings in extension modules */
|
|
#undef WITH_DOC_STRINGS
|
|
|
|
+/* Define if you want to compile in Dtrace support */
|
|
+#undef WITH_DTRACE
|
|
+
|
|
/* Define if you want to use the new-style (Openstep, Rhapsody, MacOS) dynamic
|
|
linker (dyld) instead of the old-style (NextStep) dynamic linker (rld).
|
|
Dyld is necessary to support frameworks. */
|
|
diff -up Python-3.2a1/Python/ceval.c.systemtap Python-3.2a1/Python/ceval.c
|
|
--- Python-3.2a1/Python/ceval.c.systemtap 2010-07-20 18:39:34.000000000 -0400
|
|
+++ Python-3.2a1/Python/ceval.c 2010-08-02 16:23:58.703001000 -0400
|
|
@@ -19,6 +19,10 @@
|
|
|
|
#include <ctype.h>
|
|
|
|
+#ifdef WITH_DTRACE
|
|
+#include "pydtrace.h"
|
|
+#endif
|
|
+
|
|
#ifndef WITH_TSC
|
|
|
|
#define READ_TIMESTAMP(var)
|
|
@@ -752,6 +756,70 @@ PyEval_EvalCode(PyCodeObject *co, PyObje
|
|
}
|
|
|
|
|
|
+#ifdef WITH_DTRACE
|
|
+struct frame_marker_info
|
|
+{
|
|
+ char *filename;
|
|
+ char *name;
|
|
+ int lineno;
|
|
+
|
|
+ PyObject *utf8_filename;
|
|
+ PyObject *utf8_name;
|
|
+};
|
|
+
|
|
+static void
|
|
+get_frame_marker_info(PyFrameObject *f, struct frame_marker_info *fmi)
|
|
+{
|
|
+ fmi->utf8_filename = PyUnicode_AsUTF8String(f->f_code->co_filename);
|
|
+ if (fmi->utf8_filename) {
|
|
+ fmi->filename = PyBytes_AsString(fmi->utf8_filename);
|
|
+ } else {
|
|
+ fmi->filename = NULL;
|
|
+ /* FIXME: clear the exception? */
|
|
+ }
|
|
+
|
|
+ fmi->utf8_name = PyUnicode_AsUTF8String(f->f_code->co_name);
|
|
+ if (fmi->utf8_name) {
|
|
+ fmi->name = PyBytes_AsString(fmi->utf8_name);
|
|
+ } else {
|
|
+ fmi->name = NULL;
|
|
+ /* FIXME: clear the exception? */
|
|
+ }
|
|
+
|
|
+ fmi->lineno = PyCode_Addr2Line(f->f_code, f->f_lasti);
|
|
+}
|
|
+
|
|
+static void
|
|
+release_frame_marker_info(struct frame_marker_info *fmi)
|
|
+{
|
|
+ Py_XDECREF(fmi->utf8_filename);
|
|
+ Py_XDECREF(fmi->utf8_name);
|
|
+}
|
|
+
|
|
+static void
|
|
+dtrace_entry(PyFrameObject *f)
|
|
+{
|
|
+ struct frame_marker_info fmi;
|
|
+ get_frame_marker_info(f, &fmi);
|
|
+ PYTHON_FUNCTION_ENTRY(fmi.filename, fmi.name, fmi.lineno);
|
|
+ release_frame_marker_info(&fmi);
|
|
+}
|
|
+
|
|
+static void
|
|
+dtrace_return(PyFrameObject *f)
|
|
+{
|
|
+ struct frame_marker_info fmi;
|
|
+ get_frame_marker_info(f, &fmi);
|
|
+ PYTHON_FUNCTION_RETURN(fmi.filename, fmi.name, fmi.lineno);
|
|
+ release_frame_marker_info(&fmi);
|
|
+}
|
|
+#else
|
|
+#define PYTHON_FUNCTION_ENTRY_ENABLED() 0
|
|
+#define PYTHON_FUNCTION_RETURN_ENABLED() 0
|
|
+#define dtrace_entry(f)
|
|
+#define dtrace_return(f)
|
|
+#endif
|
|
+
|
|
/* Interpreter main loop */
|
|
|
|
PyObject *
|
|
@@ -1156,6 +1224,10 @@ PyEval_EvalFrameEx(PyFrameObject *f, int
|
|
}
|
|
}
|
|
|
|
+ if (PYTHON_FUNCTION_ENTRY_ENABLED()) {
|
|
+ dtrace_entry(f);
|
|
+ }
|
|
+
|
|
co = f->f_code;
|
|
names = co->co_names;
|
|
consts = co->co_consts;
|
|
@@ -3046,6 +3118,9 @@ fast_yield:
|
|
|
|
/* pop frame */
|
|
exit_eval_frame:
|
|
+ if (PYTHON_FUNCTION_RETURN_ENABLED()) {
|
|
+ dtrace_return(f);
|
|
+ }
|
|
Py_LeaveRecursiveCall();
|
|
tstate->frame = f->f_back;
|
|
|