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?