[pypy-commit] pypy vmprof-native: move variable def out of for loop, rewrite IS_VMPROF_EVAL for pypy

plan_rich pypy.commits at gmail.com
Thu Feb 9 10:03:03 EST 2017


Author: Richard Plangger <planrichi at gmail.com>
Branch: vmprof-native
Changeset: r90026:72660eb81a7b
Date: 2017-02-09 15:51 +0100
http://bitbucket.org/pypy/pypy/changeset/72660eb81a7b/

Log:	move variable def out of for loop, rewrite IS_VMPROF_EVAL for pypy

diff --git a/rpython/rlib/rvmprof/src/rvmprof.c b/rpython/rlib/rvmprof/src/rvmprof.c
--- a/rpython/rlib/rvmprof/src/rvmprof.c
+++ b/rpython/rlib/rvmprof/src/rvmprof.c
@@ -18,22 +18,12 @@
 #endif
 
 
-void * g_symbol = 0;
-
+#ifdef RPYTHON_LL2CTYPES
+#define IS_VMPROF_EVAL(ptr) 0
+#else
+extern void * __vmprof_eval_vmprof;
 int IS_VMPROF_EVAL(void * ptr)
 {
-#ifdef RPYTHON_LL2CTYPES
-    return 0;
-#else
-
-    if (g_symbol == NULL) {
-        g_symbol = dlsym(RTLD_GLOBAL, "__vmprof_eval_vmprof");
-        if (g_symbol == NULL) {
-            fprintf(stderr, "symbol __vmprof_eval_vmprof could not be found\n");
-            exit(-1);
-        }
-    }
-
-    return ptr == g_symbol;
+    return ptr == __vmprof_eval_vmprof;
+}
 #endif
-}
diff --git a/rpython/rlib/rvmprof/src/shared/symboltable.c b/rpython/rlib/rvmprof/src/shared/symboltable.c
--- a/rpython/rlib/rvmprof/src/shared/symboltable.c
+++ b/rpython/rlib/rvmprof/src/shared/symboltable.c
@@ -390,10 +390,11 @@
             } case MARKER_STACKTRACE: {
                 long trace_count = _read_word(fileno);
                 long depth = _read_word(fileno);
+                long i;
 
                 LOG("stack 0x%llx %d %d\n", cur_pos, trace_count, depth);
 
-                for (long i = depth/2-1; i >= 0; i--) {
+                for (i = depth/2-1; i >= 0; i--) {
                     long kind = (long)_read_addr(fileno);
                     void * addr = _read_addr(fileno);
                     if (kind == VMPROF_NATIVE_TAG) {
diff --git a/rpython/rlib/rvmprof/src/shared/vmp_stack.c b/rpython/rlib/rvmprof/src/shared/vmp_stack.c
--- a/rpython/rlib/rvmprof/src/shared/vmp_stack.c
+++ b/rpython/rlib/rvmprof/src/shared/vmp_stack.c
@@ -105,6 +105,12 @@
         result[n++] = (void*)frame->value;
         *depth = n;
     }
+#ifdef PYPY_JIT_CODEMAP
+    else if (frame->kind == VMPROF_JITTED_TAG) {
+        intptr_t pc = ((intptr_t*)(frame->value - sizeof(intptr_t)))[0];
+        *depth = vmprof_write_header_for_jit_addr(result, *depth, pc, max_depth);
+    }
+#endif
 
 
 #endif
@@ -236,7 +242,7 @@
             //
 #ifdef PYPY_JIT_CODEMAP
             if (func_addr == 0 && top_most_frame->kind == VMPROF_JITTED_TAG) {
-                intptr_t pc = ((intptr_t*)(frame->value - sizeof(intptr_t)))[0];
+                intptr_t pc = ((intptr_t*)(top_most_frame->value - sizeof(intptr_t)))[0];
                 depth = vmprof_write_header_for_jit_addr(result, depth, pc, max_depth);
                 frame = FRAME_STEP(frame);
             } else if (func_addr != 0x0) {
diff --git a/rpython/rlib/rvmprof/test/test_rvmprof.py b/rpython/rlib/rvmprof/test/test_rvmprof.py
--- a/rpython/rlib/rvmprof/test/test_rvmprof.py
+++ b/rpython/rlib/rvmprof/test/test_rvmprof.py
@@ -213,7 +213,6 @@
             symbols.append(tree.name)
             if len(tree.children) == 0:
                 return
-            assert len(tree.children) == 1
             for child in tree.children.values():
                 walk(child, symbols)
         symbols = []


More information about the pypy-commit mailing list