patches/Python-07-dtrace.diff
author laca
Tue, 01 Dec 2009 11:03:56 +0000
changeset 17065 71eeb9bbac92
parent 10191 2562bec71126
permissions -rw-r--r--
2009-12-01 Laszlo (Laca) Peter <[email protected]> * SUNWPython.spec: add a nicer fix for the netpacket/packet.h build issue. * SUNWPython25.spec: add the same fix * SUNWPython26.spec: add the same fix again * patches/Python-18-disable-netpacket_h.diff: delete * patches/Python-18-netpacket-packet-h.diff: add * patches/Python25-14-netpacket-packet-h.diff: add * patches/Python26-17-disable-netpacket_h.diff: delete * patches/Python26-17-netpacket-packet-h.diff: add
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
     1
diff -prauN Python-2.4.4/Include/frameobject.h Python-new/Include/frameobject.h
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     2
--- Python-2.4.4/Include/frameobject.h	2004-07-01 23:41:07.000000000 -0700
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
     3
+++ Python-new/Include/frameobject.h	2007-07-03 07:59:58.696193000 -0700
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
     4
@@ -32,6 +32,7 @@ typedef struct _frame {
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     5
     /* As of 2.3 f_lineno is only valid when tracing is active (i.e. when
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     6
        f_trace is set) -- at other times use PyCode_Addr2Line instead. */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     7
     int f_lineno;		/* Current line number */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     8
+    int f_calllineno;		/* line number of call site */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
     9
     int f_restricted;		/* Flag set if restricted operations
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    10
 				   in this scope */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    11
     int f_iblock;		/* index in f_blockstack */
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    12
diff -prauN Python-2.4.4/Makefile.pre.in Python-new/Makefile.pre.in
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    13
--- Python-2.4.4/Makefile.pre.in	2006-10-08 10:41:25.000000000 -0700
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    14
+++ Python-new/Makefile.pre.in	2007-07-12 11:34:02.483271000 -0700
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    15
@@ -217,6 +217,7 @@ PGOBJS=		\
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    16
 
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    17
 PGENOBJS=	$(PGENMAIN) $(POBJS) $(PGOBJS)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    18
 
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    19
+DTRACE_OBJS=Python/dtrace.o Python/phelper.o
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    20
 
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    21
 ##########################################################################
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    22
 # Python
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    23
@@ -253,6 +254,7 @@ PYTHON_OBJS=	\
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    24
 		Python/getopt.o \
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    25
 		Python/pystrtod.o \
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    26
 		Python/$(DYNLOADFILE) \
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    27
+		$(DTRACE_OBJS) \
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    28
 		$(MACHDEP_OBJS) \
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    29
 		$(THREADOBJ)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    30
 
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    31
@@ -479,6 +481,17 @@ Python/importdl.o: $(srcdir)/Python/impo
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    32
 Objects/unicodectype.o:	$(srcdir)/Objects/unicodectype.c \
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    33
 				$(srcdir)/Objects/unicodetype_db.h
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    34
 
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    35
+Python/phelper.o: $(srcdir)/Python/phelper.d
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    36
+	dtrace -o $@ -DPHELPER $(DFLAGS) $(CPPFLAGS) -C -G -s $(srcdir)/Python/phelper.d
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    37
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    38
+Python/python.h: $(srcdir)/Python/python.d
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    39
+	dtrace -o $@ $(DFLAGS) -C -h -s $(srcdir)/Python/python.d
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    40
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    41
+Python/ceval.o: Python/python.h
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    42
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    43
+Python/dtrace.o: $(srcdir)/Python/python.d Python/ceval.o
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    44
+	dtrace -o $@ $(DFLAGS) -C -G -s $(srcdir)/Python/python.d Python/ceval.o
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    45
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    46
 ############################################################################
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    47
 # Header files
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    48
 
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    49
diff -prauN Python-2.4.4/Objects/frameobject.c Python-new/Objects/frameobject.c
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    50
--- Python-2.4.4/Objects/frameobject.c	2004-07-01 23:41:07.000000000 -0700
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    51
+++ Python-new/Objects/frameobject.c	2007-07-03 07:59:58.720162000 -0700
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    52
@@ -633,6 +633,7 @@ PyFrame_New(PyThreadState *tstate, PyCod
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    53
 
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    54
 	f->f_lasti = -1;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    55
 	f->f_lineno = code->co_firstlineno;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    56
+	f->f_calllineno = code->co_firstlineno;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    57
 	f->f_restricted = (builtins != tstate->interp->builtins);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    58
 	f->f_iblock = 0;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    59
 	f->f_nlocals = code->co_nlocals;
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    60
diff -prauN Python-2.4.4/Python/ceval.c Python-new/Python/ceval.c
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    61
--- Python-2.4.4/Python/ceval.c	2006-10-06 12:09:36.000000000 -0700
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    62
+++ Python-new/Python/ceval.c	2007-07-12 12:39:29.067739000 -0700
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    63
@@ -16,6 +16,11 @@
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    64
 
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    65
 #include <ctype.h>
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    66
 
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    67
+#define HAVE_DTRACE
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    68
+#ifdef HAVE_DTRACE
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    69
+#include "python.h"
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    70
+#endif
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    71
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    72
 #ifndef WITH_TSC 
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    73
 #define rdtscll(var)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    74
 #else /*WITH_TSC defined*/
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    75
@@ -490,11 +495,132 @@ PyEval_EvalCode(PyCodeObject *co, PyObje
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    76
 }
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    77
 
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    78
 
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    79
+#ifdef HAVE_DTRACE
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    80
+static void
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    81
+dtrace_entry(PyFrameObject *f)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    82
+{
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    83
+	const char *filename;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    84
+	const char *fname;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    85
+	int lineno;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    86
+	
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    87
+	filename = PyString_AsString(f->f_code->co_filename);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    88
+	fname = PyString_AsString(f->f_code->co_name);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    89
+	lineno = PyCode_Addr2Line(f->f_code, f->f_lasti);
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    90
+
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
    91
+	PYTHON_FUNCTION_ENTRY((char *)filename, (char *)fname, lineno);
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    92
+
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    93
+	/*
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    94
+	 * Currently a USDT tail-call will not receive the correct arguments.
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    95
+	 * Disable the tail call here.
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    96
+	 */
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    97
+#if defined(__sparc)
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    98
+	asm("nop");
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
    99
+#endif
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   100
+}
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   101
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   102
+static void
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   103
+dtrace_return(PyFrameObject *f)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   104
+{
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   105
+	const char *filename;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   106
+	const char *fname;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   107
+	int lineno;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   108
+	
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   109
+	filename = PyString_AsString(f->f_code->co_filename);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   110
+	fname = PyString_AsString(f->f_code->co_name);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   111
+	lineno = PyCode_Addr2Line(f->f_code, f->f_lasti);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   112
+	PYTHON_FUNCTION_RETURN((char *)filename, (char *)fname, lineno);
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   113
+
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   114
+	/*
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   115
+	 * Currently a USDT tail-call will not receive the correct arguments.
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   116
+	 * Disable the tail call here.
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   117
+	 */
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   118
+#if defined(__sparc)
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   119
+	asm("nop");
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   120
+#endif
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   121
+}
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   122
+#else
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   123
+#define	PYTHON_FUNCTION_ENTRY_ENABLED 0
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   124
+#define	PYTHON_FUNCTION_RETURN_ENABLED 0
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   125
+#define	dtrace_entry()
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   126
+#define	dtrace_return()
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   127
+#endif
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   128
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   129
 /* Interpreter main loop */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   130
 
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   131
+/*
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   132
+ * These shenanigans look like utter madness, but what we're actually doing is
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   133
+ * making sure that the ustack helper will see the PyFrameObject pointer on the
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   134
+ * stack. We have two tricky cases:
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   135
+ *
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   136
+ * amd64
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   137
+ *
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   138
+ * We use up the six registers for passing arguments, meaning the call can't
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   139
+ * use a register for passing 'f', and has to push it onto the stack in a known
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   140
+ * location.
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   141
+ *
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   142
+ * SPARC
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   143
+ *
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   144
+ * Here the problem is that (on 32-bit) the compiler is re-using %i0 before
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   145
+ * some calls inside PyEval_EvalFrameReal(), which means that when it's saved,
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   146
+ * it's just some junk value rather than the real first argument. So, instead,
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   147
+ * we trace our proxy PyEval_EvalFrame(), where we 'know' the compiler won't
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   148
+ * decide to re-use %i0. We also need to defeat optimization of our proxy.
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   149
+ */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   150
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   151
+#if defined(HAVE_DTRACE)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   152
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   153
+#if defined(__amd64)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   154
+PyObject *PyEval_EvalFrameReal(long, long, long, long, long, long,
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   155
+    PyFrameObject *);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   156
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   157
 PyObject *
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   158
 PyEval_EvalFrame(PyFrameObject *f)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   159
 {
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   160
+	volatile PyObject *f2;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   161
+	f2 = PyEval_EvalFrameReal(0, 0, 0, 0, 0, 0, f);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   162
+	return (PyObject *)f2;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   163
+}
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   164
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   165
+PyObject *
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   166
+PyEval_EvalFrameReal(long a1, long a2, long a3, long a4, long a5, long a6,
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   167
+    PyFrameObject *f)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   168
+{
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   169
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   170
+#elif defined(__sparc)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   171
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   172
+PyObject *PyEval_EvalFrameReal(PyFrameObject *f);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   173
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   174
+volatile int dummy;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   175
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   176
+PyObject *
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   177
+PyEval_EvalFrame(PyFrameObject *f)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   178
+{
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   179
+	volatile PyObject *f2;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   180
+	f2 = PyEval_EvalFrameReal(f);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   181
+	dummy = f->ob_refcnt;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   182
+	return (PyObject *)f2;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   183
+}
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   184
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   185
+PyObject *
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   186
+PyEval_EvalFrameReal(PyFrameObject *f)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   187
+{
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   188
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   189
+#else /* __amd64 || __sparc */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   190
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   191
+PyObject *
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   192
+PyEval_EvalFrame(PyFrameObject *f)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   193
+{
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   194
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   195
+#endif /* __amd64 || __sparc */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   196
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   197
+#else /* HAVE_DTRACE */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   198
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   199
+PyObject *
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   200
+PyEval_EvalFrame(PyFrameObject *f)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   201
+{
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   202
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   203
+#endif /* HAVE_DTRACE */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   204
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   205
 #ifdef DXPAIRS
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   206
 	int lastopcode = 0;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   207
 #endif
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   208
@@ -710,6 +836,9 @@ PyEval_EvalFrame(PyFrameObject *f)
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   209
 		}
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   210
 	}
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   211
 
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   212
+	if (PYTHON_FUNCTION_ENTRY_ENABLED())
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   213
+		dtrace_entry(f);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   214
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   215
 	co = f->f_code;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   216
 	names = co->co_names;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   217
 	consts = co->co_consts;
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   218
@@ -2161,6 +2290,10 @@ PyEval_EvalFrame(PyFrameObject *f)
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   219
 			PyObject **sp;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   220
 			PCALL(PCALL_ALL);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   221
 			sp = stack_pointer;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   222
+#ifdef HAVE_DTRACE
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   223
+			f->f_calllineno = PyCode_Addr2Line(f->f_code,
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   224
+			                                   f->f_lasti);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   225
+#endif
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   226
 #ifdef WITH_TSC
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   227
 			x = call_function(&sp, oparg, &intr0, &intr1);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   228
 #else
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   229
@@ -2203,6 +2336,10 @@ PyEval_EvalFrame(PyFrameObject *f)
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   230
 		    } else
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   231
 			    Py_INCREF(func);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   232
 		    sp = stack_pointer;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   233
+#ifdef HAVE_DTRACE
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   234
+		    f->f_calllineno = PyCode_Addr2Line(f->f_code,
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   235
+		                                       f->f_lasti);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   236
+#endif
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   237
 		    rdtscll(intr0);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   238
 		    x = ext_do_call(func, &sp, flags, na, nk);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   239
 		    rdtscll(intr1);
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   240
@@ -2501,6 +2638,8 @@ fast_yield:
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   241
 
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   242
 	/* pop frame */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   243
     exit_eval_frame:
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   244
+	if (PYTHON_FUNCTION_RETURN_ENABLED())
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   245
+		dtrace_return(f);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   246
 	Py_LeaveRecursiveCall();
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   247
 	tstate->frame = f->f_back;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   248
 
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   249
diff -prauN Python-2.4.4/Python/phelper.d Python-new/Python/phelper.d
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   250
--- Python-2.4.4/Python/phelper.d	1969-12-31 16:00:00.000000000 -0800
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   251
+++ Python-new/Python/phelper.d	2007-07-03 07:59:58.727255000 -0700
17065
71eeb9bbac92 2009-12-01 Laszlo (Laca) Peter <[email protected]>
laca
parents: 10191
diff changeset
   252
@@ -0,0 +1,138 @@
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   253
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   254
+/*
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   255
+ * Python ustack helper.  This relies on the first argument (PyFrame *) being
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   256
+ * on the stack; see Python/ceval.c for the contortions we go through to ensure
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   257
+ * this is the case.
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   258
+ *
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   259
+ * On x86, the PyFrame * is two slots up from the frame pointer; on SPARC, it's
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   260
+ * eight.
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   261
+ */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   262
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   263
+/*
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   264
+ * Yes, this is as gross as it looks. DTrace cannot handle static functions,
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   265
+ * and our stat_impl.h has them in ILP32.
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   266
+ */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   267
+#define _SYS_STAT_H
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   268
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   269
+#include <stdio.h>
17065
71eeb9bbac92 2009-12-01 Laszlo (Laca) Peter <[email protected]>
laca
parents: 10191
diff changeset
   270
+#include <sys/types.h>
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   271
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   272
+#include "pyport.h"
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   273
+#include "object.h"
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   274
+#include "pystate.h"
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   275
+#include "pythonrun.h"
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   276
+#include "compile.h"
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   277
+#include "frameobject.h"
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   278
+#include "stringobject.h"
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   279
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   280
+#if defined(__i386)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   281
+#define	startframe PyEval_EvalFrame
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   282
+#define	endframe PyEval_EvalCodeEx
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   283
+#elif defined(__amd64)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   284
+#define	PyEval_EvalFrame PyEval_EvalFrameReal
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   285
+#define	startframe PyEval_EvalFrameReal
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   286
+#define	endframe PyEval_EvalCodeEx
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   287
+#elif defined(__sparc)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   288
+#define	startframe PyEval_EvalFrame
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   289
+#define	endframe PyEval_EvalFrameReal
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   290
+#endif
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   291
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   292
+#ifdef __sparcv9
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   293
+#define	STACK_BIAS (2048-1)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   294
+#else
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   295
+#define	STACK_BIAS 0
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   296
+#endif
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   297
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   298
+/*
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   299
+ * Not defining PHELPER lets us test this code as a normal D script.
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   300
+ */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   301
+#ifdef PHELPER
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   302
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   303
+#define	at_evalframe(addr) \
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   304
+    ((uintptr_t)addr >= ((uintptr_t)&``startframe) && \
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   305
+     (uintptr_t)addr < ((uintptr_t)&``endframe))
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   306
+#define	probe dtrace:helper:ustack:
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   307
+#define	print_result(r) (r)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   308
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   309
+#if defined(__i386) || defined(__amd64)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   310
+#define	frame_ptr_addr ((uintptr_t)arg1 + sizeof(uintptr_t) * 2)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   311
+#elif defined(__sparc)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   312
+#define	frame_ptr_addr ((uintptr_t)arg1 + STACK_BIAS + sizeof(uintptr_t) * 8)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   313
+#else
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   314
+#error unknown architecture
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   315
+#endif
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   316
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   317
+#else /* PHELPER */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   318
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   319
+#define	at_evalframe(addr) (1)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   320
+#define	probe pid$target::PyEval_EvalFrame:entry
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   321
+#define print_result(r) (trace(r))
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   322
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   323
+#if defined(__i386) || defined(__amd64)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   324
+#define	frame_ptr_addr ((uintptr_t)uregs[R_SP] + sizeof(uintptr_t))
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   325
+#elif defined(__sparc)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   326
+/*
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   327
+ * Not implemented: we could just use R_I0, but what's the point?
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   328
+ */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   329
+#else
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   330
+#error unknown architecture
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   331
+#endif
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   332
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   333
+#endif /* PHELPER */
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   334
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   335
+extern uintptr_t PyEval_EvalFrame;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   336
+extern uintptr_t PyEval_EvalFrameReal;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   337
+extern uintptr_t PyEval_EvalCodeEx;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   338
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   339
+#define	copyin_obj(addr, obj) ((obj *)copyin((uintptr_t)addr, sizeof(obj)))
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   340
+#define	pystr_addr(addr) ((char *)addr + offsetof(PyStringObject, ob_sval))
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   341
+#define	copyin_str(dest, addr, obj) \
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   342
+    (copyinto((uintptr_t)pystr_addr(addr), obj->ob_size, (dest)))
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   343
+#define	add_str(addr, obj) \
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   344
+    copyin_str(this->result + this->pos, addr, obj); \
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   345
+    this->pos += obj->ob_size; \
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   346
+    this->result[this->pos] = '\0';
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   347
+#define	add_digit(nr, div) ((nr / div) ? \
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   348
+    (this->result[this->pos++] = '0' + ((nr / div) % 10)) : \
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   349
+    (this->result[this->pos] = '\0'))
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   350
+#define	add_char(c) (this->result[this->pos++] = c)
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   351
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   352
+probe /at_evalframe(arg0)/ 
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   353
+{
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   354
+	this->framep = *(uintptr_t *)copyin(frame_ptr_addr, sizeof(uintptr_t));
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   355
+	this->frameo = copyin_obj(this->framep, PyFrameObject);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   356
+	this->codep = this->frameo->f_code;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   357
+	this->lineno = this->frameo->f_calllineno;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   358
+	this->codeo = copyin_obj(this->codep, PyCodeObject);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   359
+	this->filenamep = this->codeo->co_filename;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   360
+	this->fnamep = this->codeo->co_name;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   361
+	this->filenameo = copyin_obj(this->filenamep, PyStringObject);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   362
+	this->fnameo = copyin_obj(this->fnamep, PyStringObject);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   363
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   364
+	this->len = 1 + this->filenameo->ob_size + 1 + 5 + 2 +
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   365
+	    this->fnameo->ob_size + 1 + 1;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   366
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   367
+	this->result = (char *)alloca(this->len);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   368
+	this->pos = 0;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   369
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   370
+	add_char('@');
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   371
+	add_str(this->filenamep, this->filenameo);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   372
+	add_char(':');
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   373
+	add_digit(this->lineno, 10000);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   374
+	add_digit(this->lineno, 1000);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   375
+	add_digit(this->lineno, 100);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   376
+	add_digit(this->lineno, 10);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   377
+	add_digit(this->lineno, 1);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   378
+	add_char(' ');
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   379
+	add_char('(');
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   380
+	add_str(this->fnamep, this->fnameo);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   381
+	add_char(')');
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   382
+	this->result[this->pos] = '\0';
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   383
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   384
+	print_result(stringof(this->result));
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   385
+}
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   386
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   387
+probe /!at_evalframe(arg0)/
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   388
+{
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   389
+	NULL;
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   390
+}
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   391
diff -prauN Python-2.4.4/Python/python.d Python-new/Python/python.d
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   392
--- Python-2.4.4/Python/python.d	1969-12-31 16:00:00.000000000 -0800
10191
2562bec71126 2007-07-13 Laszlo (Laca) Peter <[email protected]>
laca
parents: 9619
diff changeset
   393
+++ Python-new/Python/python.d	2007-07-03 07:59:58.727981000 -0700
9619
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   394
@@ -0,0 +1,10 @@
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   395
+provider python {
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   396
+	probe function__entry(const char *, const char *, int);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   397
+	probe function__return(const char *, const char *, int);
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   398
+};
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   399
+
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   400
+#pragma D attributes Evolving/Evolving/Common provider python provider
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   401
+#pragma D attributes Private/Private/Common provider python module
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   402
+#pragma D attributes Private/Private/Common provider python function
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   403
+#pragma D attributes Evolving/Evolving/Common provider python name
ec2d81c0a557 2007-03-23 Laszlo (Laca) Peter <[email protected]>
laca
parents:
diff changeset
   404
+#pragma D attributes Evolving/Evolving/Common provider python args