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

Re: [Xen-devel] [PATCH v8 03/20] xenctx: Add -n (--display-stack-pages) option to output larger stack



On 04/01/2014 02:19 PM, Ian Campbell wrote:
On Thu, 2014-03-27 at 15:05 -0400, Don Slutz wrote:
Important: This is the stack size (also known as stack limit) to
display not the configured stack size.

Note: use with caution (easy to get garbage).

Below is a pictures of a configured 3 page stack, and where
the SP currently is.  Each box is a page.

                             -n 1    -n 2    -n 3

        +------------------+
        |                  |
        |                  |
        |                  |
        |                  |
SP --> |                  |   *       *       *
        +------------------+          |       |
        |                  |          |       |
        |                  |          |       |
        |                  |          |       |
        |                  |          |       |
        |                  |          *       |
        +------------------+                  |
        |                  |                  |
        |                  |                  |
        |                  |                  |
        |                  |                  |
        |                  |                  *
        +------------------+

Display using "-n 3" since the used stack pages is 3.

Stacks grow downwards on all of the architectures we support. Perhaps
that is why the rest of us find your diagrams so confusing?

I drew my example to you the way I did for a reason.

Also, should the other end of the *---* line from SP (the bottom in your
diagram above) not be aligned to a page boundary, after all -n works in
pages.


@@ -664,6 +667,8 @@ static int print_stack(vcpu_guest_context_any_t *ctx, int 
vcpu, int width)

      stack_limit = ((stack_pointer(ctx) + XC_PAGE_SIZE)
                     & ~((guest_word_t) XC_PAGE_SIZE - 1));
+    if ( xenctx.nr_stack_pages > 1 )
+        stack_limit += (xenctx.nr_stack_pages - 1) * XC_PAGE_SIZE;

The if here is still redundant.

      printf("\n");
      printf("Stack:\n");
      for (i=1; i<5 && stack < stack_limit; i++) {
@@ -834,18 +839,24 @@ static void usage(void)
          kernel_start);
      printf("  -a, --all          display more registers\n");
      printf("  -C, --all-vcpus    print info for all vcpus\n");
+    printf("  -n PAGES, --display-stack-pages=PAGES\n");
+    printf("                     Display N pages from the stack pointer. (default 
%d)\n",
+           DEFAULT_NR_STACK_PAGES);
+    printf("                     Changes stack limit.  Note: use with caution 
(easy\n");
+    printf("                     to get garbage).\n");

Doesn't it go without saying that if you go off the bottom of the stack
you will get garbage?

Only if you know that the tool doesn't know where the end of the stack is. (Although hopefully the wording, "Display N pages" should give you a hint.)

But what is "changes stack limit" supposed to mean?

 -George


_______________________________________________
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®.