[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2 03/12] xenctx: Output ascii version of stack also.



>>> On 06.11.13 at 21:08, Don Slutz <dslutz@xxxxxxxxxxx> wrote:

Why? I personally don't see a need - there's rarely much useful
ASCII data on the stack. So afaic: If at all, then only via command
line option defaulting to off.

Jan

> From: Don Slutz <Don@xxxxxxxxxxxxxxx>
> 
> Signed-off-by: Don Slutz <Don@xxxxxxxxxxxxxxx>
> ---
>  tools/xentrace/xenctx.c |   27 ++++++++++++++++++++++++++-
>  1 files changed, 26 insertions(+), 1 deletions(-)
> 
> diff --git a/tools/xentrace/xenctx.c b/tools/xentrace/xenctx.c
> index 06a8850..dabce16 100644
> --- a/tools/xentrace/xenctx.c
> +++ b/tools/xentrace/xenctx.c
> @@ -640,6 +640,8 @@ static int print_code(vcpu_guest_context_any_t *ctx, int 
> vcpu)
>      return 0;
>  }
>  
> +#define BYTES_PER_LINE 32
> +
>  static int print_stack(vcpu_guest_context_any_t *ctx, int vcpu, int width)
>  {
>      guest_word_t stack = stack_pointer(ctx);
> @@ -647,6 +649,8 @@ static int print_stack(vcpu_guest_context_any_t *ctx, int 
> vcpu, int width)
>      guest_word_t frame;
>      guest_word_t word;
>      guest_word_t *p;
> +    guest_word_t ascii[BYTES_PER_LINE/4];
> +    unsigned char *bytep;
>      int i;
>  
>      stack_limit = ((stack_pointer(ctx) + XC_PAGE_SIZE)
> @@ -656,15 +660,36 @@ static int print_stack(vcpu_guest_context_any_t *ctx, 
> int vcpu, int width)
>      printf("\n");
>      printf("Stack:\n");
>      for (i=1; i<10 && stack < stack_limit; i++) {
> -        while(stack < stack_limit && stack < stack_pointer(ctx) + i*32) {
> +        int j = 0;
> +        int k;
> +
> +        while(stack < stack_limit && stack < stack_pointer(ctx) + 
> i*BYTES_PER_LINE) {
>              p = map_page(ctx, vcpu, stack);
>              if (!p)
>                  return -1;
>              word = read_stack_word(p, width);
> +            ascii[j++] = word;
>              printf(" ");
>              print_stack_word(word, width);
>              stack += width;
>          }
> +        printf("  ");
> +        for (k = j; k < BYTES_PER_LINE/width; k++)
> +            printf("%s ", width == 8
> +                   ? "                "
> +                   : "        ");
> +        for (k = 0; k < j; k++) {
> +            int l;
> +
> +            bytep = (unsigned char*)&ascii[k];
> +            for (l = 0; l < width; l++) {
> +                if ((*bytep < 127) && (*bytep >= 32))
> +                    printf("%c", *bytep);
> +                else
> +                    printf(".");
> +                bytep++;
> +            }
> +        }
>          printf("\n");
>      }
>      printf("\n");
> -- 
> 1.7.1




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.