[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