Author: Maciej Fijalkowski <fij...@gmail.com> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit