Author: Maciej Fijalkowski <[email protected]>
Branch: vmprof
Changeset: r75541:1aba5ad5fd5c
Date: 2015-01-26 19:48 +0200
http://bitbucket.org/pypy/pypy/changeset/1aba5ad5fd5c/
Log: try to work on storing extra pieces in header
diff --git a/pypy/module/_vmprof/src/get_custom_offset.c
b/pypy/module/_vmprof/src/get_custom_offset.c
--- a/pypy/module/_vmprof/src/get_custom_offset.c
+++ b/pypy/module/_vmprof/src/get_custom_offset.c
@@ -2,6 +2,8 @@
long pypy_jit_start_addr();
long pypy_jit_end_addr();
long pypy_jit_stack_depth_at_loc(long);
+long find_codemap_at_addr(long);
+long yield_bytecode_at_addr(long, long, long*);
static ptrdiff_t vmprof_unw_get_custom_offset(void* ip) {
long ip_l = (long)ip;
@@ -11,3 +13,29 @@
}
return pypy_jit_stack_depth_at_loc(ip);
}
+
+static long vmprof_write_header_for_jit_addr(void **result, long n,
+
intptr_t addr, int max_depth)
+{
+ long codemap_pos;
+ long current_pos = 0;
+ intptr_t id;
+
+ if (addr < pypy_jit_start_addr() || addr > pypy_jit_end_addr()) {
+ return n;
+ }
+ codemap_pos = find_codemap_at_addr(addr);
+ if (codemap_pos == -1) {
+ return n;
+ }
+ while (1) {
+ id = yield_bytecode_at_addr(codemap_pos, addr, ¤t_pos);
+ if (id == 0) {
+ return n;
+ }
+ result[n++] = id;
+ if (n >= max_depth) {
+ return n;
+ }
+ }
+}
diff --git a/pypy/module/_vmprof/src/vmprof.c b/pypy/module/_vmprof/src/vmprof.c
--- a/pypy/module/_vmprof/src/vmprof.c
+++ b/pypy/module/_vmprof/src/vmprof.c
@@ -176,6 +176,8 @@
}
result[n++] = ip;
+ n = vmprof_write_header_for_jit_addr(result, n, ip, max_depth);
+
if (vmprof_unw_step(&cursor) <= 0) {
break;
}
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit