From de0233af177806ac96d535bb58f27875fb8c5375 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Thu, 1 May 2014 14:26:20 +0200 Subject: Fix inner and outer stack cuts to match on procedure code * doc/ref/api-debug.texi (Stack Capture): Update make-stack docs. * libguile/programs.h: * libguile/programs.c (scm_program_address_range): New internal procedure. * libguile/stacks.c (narrow_stack): Interpret a pair of integers as an address range. If a cut is a procedure, attempt to resolve it to an address range. (scm_make_stack): Update docstring. * module/system/vm/program.scm (program-address-range): New exported procedure. * module/statprof.scm (statprof, gcprof): Use program-address-range to get the outer-cut, for efficiency. --- doc/ref/api-debug.texi | 54 +++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) (limited to 'doc/ref/api-debug.texi') diff --git a/doc/ref/api-debug.texi b/doc/ref/api-debug.texi index 9b0e56448..bf25c74c9 100644 --- a/doc/ref/api-debug.texi +++ b/doc/ref/api-debug.texi @@ -88,33 +88,33 @@ evaluation stack is used for creating the stack frames, otherwise the frames are taken from @var{obj} (which must be a continuation or a frame object). -@var{arg} @dots{} can be any combination of integer, procedure, prompt -tag and @code{#t} values. - -These values specify various ways of cutting away uninteresting -stack frames from the top and bottom of the stack that -@code{make-stack} returns. They come in pairs like this: -@code{(@var{inner_cut_1} @var{outer_cut_1} @var{inner_cut_2} -@var{outer_cut_2} @dots{})}. - -Each @var{inner_cut_i} can be @code{#t}, an integer, a prompt -tag, or a procedure. @code{#t} means to cut away all frames up -to but excluding the first user module frame. An integer means -to cut away exactly that number of frames. A prompt tag means -to cut away all frames that are inside a prompt with the given -tag. A procedure means to cut away all frames up to but -excluding the application frame whose procedure matches the -specified one. - -Each @var{outer_cut_i} can be an integer, a prompt tag, or a -procedure. An integer means to cut away that number of frames. -A prompt tag means to cut away all frames that are outside a -prompt with the given tag. A procedure means to cut away -frames down to but excluding the application frame whose -procedure matches the specified one. - -If the @var{outer_cut_i} of the last pair is missing, it is -taken as 0. +@var{arg} @dots{} can be any combination of integer, procedure, address +range, and prompt tag values. + +These values specify various ways of cutting away uninteresting stack +frames from the top and bottom of the stack that @code{make-stack} +returns. They come in pairs like this: @code{(@var{inner_cut_1} +@var{outer_cut_1} @var{inner_cut_2} @var{outer_cut_2} @dots{})}. + +Each @var{inner_cut_i} can be an integer, a procedure, an address range, +or a prompt tag. An integer means to cut away exactly that number of +frames. A procedure means to cut away all frames up to but excluding +the frame whose procedure matches the specified one. An address range +is a pair of integers indicating the low and high addresses of a +procedure's code, and is the same as cutting away to a procedure (though +with less work). Anything else is interpreted as a prompt tag which +cuts away all frames that are inside a prompt with the given tag. + +Each @var{outer_cut_i} can likewise be an integer, a procedure, an +address range, or a prompt tag. An integer means to cut away that +number of frames. A procedure means to cut away frames down to but +excluding the frame whose procedure matches the specified one. An +address range is the same, but with the procedure's code specified as an +address range. Anything else is taken to be a prompt tag, which cuts +away all frames that are outside a prompt with the given tag. + + +If the @var{outer_cut_i} of the last pair is missing, it is taken as 0. @end deffn @deffn {Scheme Syntax} start-stack id exp -- cgit v1.2.3